Come risolvere il problema in R: l'operatore $ non è valido per i vettori atomici
In questo articolo, vedremo come correggere l'operatore $ non valido per i vettori atomici nel file Programmazione R lingua .
L'errore che si può incontrare in R è:
$ operator is invalid for atomic vectors
Un errore di questo tipo viene prodotto dal compilatore R quando proviamo a ottenere un elemento di un vettore atomico utilizzando l'operatore $. Un vettore atomico è semplicemente un oggetto unidimensionale contenente dati creati con l'aiuto delle funzioni c() e vector(). R non ci consente di accedere agli elementi di un vettore atomico utilizzando il simbolo $. Ma possiamo usare le doppie parentesi, ad esempio [[]] o la funzione getElement() per accedervi.
Quando potrebbe verificarsi questo errore
Consideriamo un esempio in cui abbiamo un vettore numerico trasportare inizializzato con i primi cinque numeri naturali. A ciascuno dei numeri viene assegnato un nome utilizzando la funzionenames() in R. La sintassi della funzionenames() è riportata di seguito:
Sintassi: nomi(vect) <- valore
parametri:
- vect: un oggetto, ad esempio vettore, matrice, frame di dati, ecc.
- valore: i nomi corrispondenti da assegnare
R
# Define a vector> vect <-> c> (1, 2, 3, 4, 5)> > # Set integers names> names> (vect) <-> c> (> 'first'> ,> 'second'> ,> 'third'> ,> > 'fourth'> ,> 'fifth'> )> > # Display the vector> vect> |
Produzione:
Ora proviamo ad accedere all'elemento terzo elemento utilizzando l'istruzione, vect$terzo:
R
# Define a vector> vect <-> c> (1, 2, 3, 4, 5)> > # Set integers names> names> (vect) <-> c> (> 'first'> ,> 'second'> ,> 'third'> ,> > 'fourth'> ,> 'fifth'> )> > # Display the vector> vect$third> |
Produzione:
Il compilatore R produce un errore perché non è consentito accedere agli elementi in un vettore atomico in questo modo. Per verificare se il vettore è realmente un vettore atomico, possiamo utilizzare la funzione is.atomic() in R. La sintassi di questa funzione è riportata di seguito:
Sintassi: is.atomic(vect)
parametri:
vect: qui vect rappresenta un vettore
Tipo di reso:
- VERO: se vect è un vettore atomico
- FALSO: Se vect non è un vettore atomico
Come correggere l'errore
Ci sono tre modi per usarlo possiamo correggere questo errore:
Metodo 1: accesso agli elementi utilizzando parentesi doppie
Possiamo accedere facilmente agli elementi di un vettore atomico con l'aiuto di parentesi doppie che, [[]]:
R
# Define a vector> vect <-> c> (1, 2, 3, 4, 5)> > # Set integers names> names> (vect) <-> c> (> 'first'> ,> 'second'> ,> 'third'> ,> > 'fourth'> ,> 'fifth'> )> > # Display the third element of the> # vector> vect[[> 'third'> ]]> |
Produzione:
Metodo 2: accesso agli elementi utilizzando la funzione getElement()
Un altro modo è utilizzare la funzione getElement() per accedere agli elementi del vettore atomico. La funzione ha la seguente sintassi:
Sintassi: getElement(vect, specificatore)
parametri:
- vect: rappresenta un vettore
- specificatore: rappresenta il nome dell'elemento a cui vogliamo accedere
Tipo di reso:
- Restituisce un elemento contrassegnato con specificatore
R
# Define a vector> vect <-> c> (1, 2, 3, 4, 5)> > # Set integers names> names> (vect) <-> c> (> 'first'> ,> 'second'> ,> 'third'> ,> > 'fourth'> ,> 'fifth'> )> > # Display the third element of> # the vector> getElement> (vect,> 'third'> )> |
Produzione:
Metodo 3: accesso agli elementi convertendo il vettore in frame di dati e quindi utilizzando l'operatore $
L'altro modo è convertire prima il vettore in un frame di dati e quindi applicare l'operatore $. Possiamo convertire un vettore in un frame di dati utilizzando la funzione as.data.frame(). La sintassi di questa funzione è la seguente:
Sintassi: as.data.frame(oggetto)
Parametro:
- l'oggetto rappresenta un vettore o una matrice
Tipo di reso:
- Restituisce un vettore
R
# Define a vector> vect <-> c> (1, 2, 3, 4, 5)> > # Set integers names> names> (vect) <-> c> (> 'first'> ,> 'second'> ,> 'third'> ,> > 'fourth'> ,> 'fifth'> )> > # Transform the vector to data frame> dataframe <-> as.data.frame> (> t> (vect))> > # Access the third element> dataframe$third> |
Produzione: