Hoe om te gaan met een r-fout: $ operator is niet geldig voor atoomvectoren
Een veel voorkomende fout die u in R kunt tegenkomen is:
$ operator is invalid for atomic vectors
Deze fout treedt op wanneer u probeert toegang te krijgen tot een element van een atoomvector met behulp van de operator $ .
Een „atoomvector“ is elk eendimensionaal gegevensobject dat is gemaakt met behulp van de functies c() of vector() in R.
Helaas kan de $ niet worden gebruikt om toegang te krijgen tot de elementen van atoomvectoren. In plaats daarvan moet u dubbele haakjes [[]] of de functie getElement() gebruiken.
In deze tutorial worden voorbeelden gegeven van hoe u in de praktijk met deze fout kunt omgaan.
Hoe de foutmelding te reproduceren
Stel dat we de operator $ proberen te gebruiken om toegang te krijgen tot een element van de volgende vector 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
We ontvangen een foutmelding omdat het niet geldig is om de operator $ te gebruiken om toegang te krijgen tot de elementen van atoomvectoren. We kunnen ook controleren of onze vector inderdaad atomair is:
#check if vector is atomic
is. atomic (x)
[1] TRUE
Methode #1: Toegang tot elementen met dubbele haakjes
Eén manier om toegang te krijgen tot elementen op naam in een vector is door de [[]]- notatie te gebruiken:
#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
Methode #2: toegang krijgen tot elementen met getElement()
Een andere manier om toegang te krijgen tot elementen op naam in een vector is door de notatie getElement() te gebruiken:
#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
Methode #3: Converteer vector naar dataframe en gebruik $operator
Een andere manier om toegang te krijgen tot elementen op naam in een vector is door eerst de vector naar een dataframe te converteren en vervolgens de operator $ te gebruiken om toegang te krijgen tot de waarde:
#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
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in R kunt oplossen:
Oplossing in R: namen komen niet overeen met eerdere namen
Hoe op te lossen in R: NA’s geïntroduceerd door dwang
Hoe te repareren in R: hint buiten de grenzen
Hoe op te lossen in R: contrasten kunnen alleen worden toegepast op factoren met 2 of meer niveaus