Jak radzić sobie z błędem r: operator $ nie jest prawidłowy dla wektorów atomowych
Typowym błędem, jaki możesz napotkać w R jest:
$ operator is invalid for atomic vectors
Ten błąd występuje, gdy próbujesz uzyskać dostęp do elementu wektora atomowego za pomocą operatora $ .
„Wektor atomowy” to dowolny jednowymiarowy obiekt danych utworzony przy użyciu funkcji c() lub Vector() w języku R.
Niestety, $ nie może być użyte do uzyskania dostępu do elementów wektorów atomowych. Zamiast tego powinieneś użyć podwójnych nawiasów [[]] lub funkcji getElement() .
W tym samouczku przedstawiono przykłady obsługi tego błędu w praktyce.
Jak odtworzyć komunikat o błędzie
Załóżmy, że próbujemy użyć operatora $ , aby uzyskać dostęp do elementu następującego wektora w 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
Otrzymujemy błąd, ponieważ użycie operatora $ w celu uzyskania dostępu do elementów wektorów atomowych jest nieprawidłowe. Możemy również sprawdzić, czy nasz wektor jest rzeczywiście atomowy:
#check if vector is atomic
is. atomic (x)
[1] TRUE
Metoda nr 1: Uzyskaj dostęp do elementów za pomocą podwójnych nawiasów
Jednym ze sposobów dostępu do elementów wektora według nazwy jest użycie notacji [[]] :
#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
Metoda nr 2: Uzyskaj dostęp do elementów za pomocą getElement()
Innym sposobem uzyskania dostępu do elementów wektora według nazwy jest użycie notacji 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
Metoda nr 3: Konwertuj wektor na ramkę danych i użyj operatora $
Innym sposobem uzyskania dostępu do elementów wektora według nazwy jest najpierw przekonwertowanie wektora na ramkę danych, a następnie użycie operatora $ w celu uzyskania dostępu do wartości:
#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
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak rozwiązać inne typowe błędy w języku R:
Jak naprawić w R: Nazwy nie pasują do poprzednich nazw
Jak naprawić w R: NA wprowadzone przez przymus
Jak naprawić w R: wskazówka poza zakresem
Jak naprawić w R: kontrasty można zastosować tylko do czynników o 2 lub więcej poziomach