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

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *