Comment gérer l’erreur R : l’opérateur $ n’est pas valide pour les vecteurs atomiques
Une erreur courante que vous pouvez rencontrer dans R est :
$ operator is invalid for atomic vectors
Cette erreur se produit lorsque vous tentez d’accéder à un élément d’un vecteur atomique à l’aide de l’opérateur $ .
Un « vecteur atomique » est tout objet de données unidimensionnel créé à l’aide des fonctions c() ou vector() dans R.
Malheureusement, le $ ne peut pas être utilisé pour accéder aux éléments des vecteurs atomiques. Au lieu de cela, vous devez utiliser des doubles crochets [[]] ou la fonction getElement() .
Ce didacticiel partage des exemples sur la manière de gérer cette erreur dans la pratique.
Comment reproduire le message d’erreur
Supposons que nous essayions d’utiliser l’ opérateur $ pour accéder à un élément du vecteur suivant dans R :
#define vector
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
Nous recevons une erreur car il n’est pas valide d’utiliser l’opérateur $ pour accéder aux éléments des vecteurs atomiques. On peut aussi vérifier que notre vecteur est bien atomique :
#check if vector is atomic
is.atomic(x)
[1] TRUE
Méthode n°1 : accéder aux éléments à l’aide de doubles crochets
Une façon d’accéder aux éléments par leur nom dans un vecteur consiste à utiliser la notation [[]] :
#define vector
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
Méthode n°2 : accéder aux éléments à l’aide de getElement()
Une autre façon d’accéder aux éléments par leur nom dans un vecteur consiste à utiliser la notation getElement() :
#define vector
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
Méthode n°3 : Convertir le vecteur en bloc de données et utiliser l’opérateur $
Une autre façon d’accéder aux éléments par leur nom dans un vecteur consiste d’abord à convertir le vecteur en bloc de données, puis à utiliser l’opérateur $ pour accéder à la valeur :
#define vector 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
Ressources additionnelles
Les didacticiels suivants expliquent comment résoudre d’autres erreurs courantes dans R :
Comment réparer dans R : les noms ne correspondent pas aux noms précédents
Comment réparer dans R : les NA introduits par la coercition
Comment réparer dans R : indice hors limites
Comment réparer dans R : les contrastes ne peuvent être appliqués qu’à des facteurs avec 2 niveaux ou plus