Comment tester si un objet est un vecteur, c'est-à-dire le mode logical
, numeric
, complex
ou character
? Le problème avec is.vector
est qu'il renvoie également TRUE
pour les listes et peut-être d'autres types:
> is.vector(list())
[1] TRUE
Je veux savoir si c'est un vecteur de types primitifs. Existe-t-il une méthode native pour cela, ou dois-je passer par le mode de stockage?
Il n'y a que des fonctions primitives, donc je suppose que vous voulez savoir si le vecteur est l'un des types atomiques. Si vous voulez savoir si un objet est atomique, utilisez is.atomic
.
is.atomic(logical())
is.atomic(integer())
is.atomic(numeric())
is.atomic(complex())
is.atomic(character())
is.atomic(raw())
is.atomic(NULL)
is.atomic(list()) # is.vector==TRUE
is.atomic(expression()) # is.vector==TRUE
is.atomic(pairlist()) # potential "gotcha": pairlist() returns NULL
is.atomic(pairlist(1)) # is.vector==FALSE
Si vous n'êtes intéressé que par le sous-ensemble des types atomiques que vous mentionnez, il serait préférable de les tester explicitement:
mode(foo) %in% c("logical","numeric","complex","character")
Peut-être pas optimal, mais il fera le travail: vérifiez si la variable est un vecteur ET si ce n'est pas une liste. Ensuite, vous contournez le is.vector
résultat:
if(is.vector(someVector) & !is.list(someVector)) {
do something with the vector
}