logo

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>

>

rendere eseguibile uno script di shell

>

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)

mycricketlive

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: