Come gestire l'errore r: l'operatore $ non è valido per i vettori atomici
Un errore comune che potresti riscontrare in R è:
$ operator is invalid for atomic vectors
Questo errore si verifica quando si tenta di accedere a un elemento di un vettore atomico utilizzando l’operatore $ .
Un “vettore atomico” è qualsiasi oggetto dati unidimensionale creato utilizzando le funzioni c() o vector() in R.
Sfortunatamente, $ non può essere utilizzato per accedere agli elementi dei vettori atomici. Dovresti invece utilizzare le doppie parentesi [[]] o la funzione getElement() .
Questo tutorial condivide esempi di come gestire questo errore nella pratica.
Come riprodurre il messaggio di errore
Supponiamo di provare a utilizzare l’ operatore $ per accedere a un elemento del seguente vettore in R:
#definevector
x <- c(1, 3, 7, 6, 2)
#provide names
names(x) <- c('a', 'b', 'c', 'd', 'e')
#display vector
x
a B C D E
1 3 7 6 2
#attempt to access value in 'e'
x$e
Error in x$e: $ operator is invalid for atomic vectors
Stiamo ricevendo un errore perché non è valido utilizzare l’operatore $ per accedere agli elementi dei vettori atomici. Possiamo anche verificare che il nostro vettore sia effettivamente atomico:
#check if vector is atomic
is. atomic (x)
[1] TRUE
Metodo n. 1: accedere agli elementi utilizzando le parentesi doppie
Un modo per accedere agli elementi in base al nome in un vettore è utilizzare la notazione [[]] :
#definevector
x <- c(1, 3, 7, 6, 2)
#provide names
names(x) <- c('a', 'b', 'c', 'd', 'e')
#access value for 'e'
x[['e']]
[1] 2
Metodo n. 2: accedere agli elementi utilizzando getElement()
Un altro modo per accedere agli elementi in base al nome in un vettore è utilizzare la notazione getElement() :
#definevector
x <- c(1, 3, 7, 6, 2)
#provide names
names(x) <- c('a', 'b', 'c', 'd', 'e')
#access value for 'e'
getElement(x, 'e')
[1] 2
Metodo n. 3: convertire il vettore in frame di dati e utilizzare $operator
Un altro modo per accedere agli elementi per nome in un vettore è convertire prima il vettore in un frame di dati, quindi utilizzare l’operatore $ per accedere al valore:
#definevector x <- c(1, 3, 7, 6, 2) #provide names names(x) <- c('a', 'b', 'c', 'd', 'e') #convert vector to data frame data_x <- as. data . frame (t(x)) #display data frame data_x a B C D E 1 1 3 7 6 2 #access value for 'e' data_x$e [1] 2
Risorse addizionali
I seguenti tutorial spiegano come risolvere altri errori comuni in R:
Come risolvere il problema in R: i nomi non corrispondono ai nomi precedenti
Come risolvere in R: NA introdotte dalla coercizione
Come riparare in R: suggerimento fuori limite
Come risolvere in R: i contrasti possono essere applicati solo a fattori con 2 o più livelli