Chaîne de comparer en “si la clause” en boucle dans la R conduit à la “condition est de longueur > 1 et seul le premier élément sera utilisé”?
Je suis intrigué par ce comportement dans R. je veux juste faire une simple comparaison de chaîne d'une liste de chaînes produites par strsplit. Donc, ne pas comprendre pourquoi la suite des deux premiers morceaux de code pour faire ce que j'attendais, tandis que le troisième ne l'est pas.
> for (i in strsplit("A text I want to display with spaces", " ")) { print(i) }
[1] "A" "text" "I" "want" "to" "display" "with" "spaces"
Ok, c'est logique ...
> for (i in strsplit("A text I want to display with spaces", " ")) { print(i=="want") }
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
Ok, ce trop. Mais, quel est le problème avec la construction suivante?
> for (i in strsplit("A text I want to display with spaces", " ")) { if (i=="want") print("yes") }
Warning message:
In if (i == "want") print("yes") :
the condition has length > 1 and only the first element will be used
Pourquoi n'est-il pas juste d'impression "oui" lors de la quatrième mot se rencontre? Que dois-je modifier pour avoir ce comportement souhaité?
OriginalL'auteur yossarian | 2011-10-30
Vous devez vous connecter pour publier un commentaire.
Le problème est que
strsplit
produit un liste de fractionnement des chaînes de caractères (dans ce cas avec une longueur de 1, parce que vous ne lui a donné qu'une seule chaîne à split).Vous pouvez voir ce qui se passe si vous il suffit d'imprimer les éléments:
le premier élément est un
character
vecteur.En fonction de ce que vous faites vous pourriez aussi envisager d'vectorisé comparaisons comme
ifelse(ss=="want","yes","no")
OriginalL'auteur Ben Bolker