Jak naprawić w R: Operator $ jest nieprawidłowy dla wektorów atomowych
W tym artykule zobaczymy, jak naprawić nieprawidłowy operator $ dla wektorów atomowych w Programowanie R język .
Błąd, który można napotkać w R, to:
$ operator is invalid for atomic vectors
Taki błąd generuje kompilator R, gdy próbujemy uzyskać element wektora atomowego za pomocą operatora $. Wektor atomowy to po prostu jednowymiarowy obiekt zawierający dane utworzone za pomocą funkcji c() i Vector(). R nie pozwala nam na dostęp do elementów wektora atomowego za pomocą symbolu $. Ale aby uzyskać do nich dostęp, możemy użyć podwójnych nawiasów, tj. [[]] lub funkcji getElement().
Kiedy może wystąpić ten błąd
Rozważmy przykład, w którym mamy wektor liczbowy nosić inicjalizowane pierwszymi pięcioma liczbami naturalnymi. Każdej z liczb przypisuje się nazwę za pomocą funkcji Names() w języku R. Składnię funkcji Names() podano poniżej:
Składnia: nazwy(vect) <- wartość
Parametry:
- vect: obiekt, tj. wektor, macierz, ramka danych itp.
- wartość: Odpowiednie nazwy, które mają zostać przypisane
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> |
Wyjście:
Spróbujmy teraz uzyskać dostęp do elementu trzeci element za pomocą instrukcji, vect$trzeci:
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> |
Wyjście:
Kompilator R generuje błąd, ponieważ nie mamy w ten sposób dostępu do elementów wektora atomowego. Aby sprawdzić, czy wektor jest rzeczywiście wektorem atomowym, możemy użyć funkcji is.atomic() w R. Składnię tej funkcji podano poniżej:
Składnia: jest.atomowy(wektor)
Parametry:
vect: Tutaj vect reprezentuje wektor
Typ zwrotu:
- PRAWDA: Jeśli vect jest wektorem atomowym
- FAŁSZ: Jeśli vect nie jest wektorem atomowym
Jak naprawić błąd
Istnieją trzy sposoby użycia możemy naprawić ten błąd:
Metoda 1: Dostęp do elementów za pomocą podwójnych nawiasów
Możemy łatwo uzyskać dostęp do elementów wektora atomowego za pomocą podwójnych nawiasów, które to, [[]]:
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'> ]]> |
Wyjście:
metoda 2: Dostęp do elementów za pomocą funkcji getElement().
Innym sposobem jest użycie funkcji getElement() w celu uzyskania dostępu do elementów wektora atomowego. Funkcja ma następującą składnię:
Składnia: getElement(vect, specyfikator)
Parametry:
- vect: reprezentuje wektor
- specyfikator: reprezentuje nazwę elementu, do którego chcemy uzyskać dostęp
Typ zwrotu:
- Zwraca element oznaczony specyfikatorem
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'> )> |
Wyjście:
Metoda 3: Dostęp do elementów poprzez konwersję wektora na ramkę danych, a następnie użycie operatora $
Innym sposobem jest najpierw przekonwertowanie wektora na ramkę danych, a następnie zastosowanie operatora $. Możemy przekształcić wektor w ramkę danych za pomocą funkcji as.data.frame(). Poniżej podano składnię tej funkcji:
Składnia: jako.data.frame(obiekt)
Parametr:
- obiekt reprezentuje wektor lub macierz
Typ zwrotu:
- Zwraca wektor
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> |
Wyjście: