problème spécifique je suis la résolution:R Valeurs vecteur Écraser dans la fonction
Créer un vecteur de caractère avec la longueur du nombre de rangées-de-iris-ensemble de données, de telle sorte que, chaque élément obtient une valeur de caractère - "supérieur à 5" si le 'Sepal.Length' correspondant> 5, sinon il devrait être "inférieur à 5".
Cela fonctionne:
char_vect <- c(seq(1:nrow(iris)))
for (i in char_vect) {
if (iris$Sepal.Length[i] > 5) {
char_vect[i] <- ("greater than 5") } else {
char_vect[i] <- ("less than 5")
}
}
Mais pour une raison quelconque, si je définis char_vect comme suit, je reçois des réponses drôles:
char_vect <- iris$Sepal.Length
for (i in char_vect) {
if (iris$Sepal.Length[i] > 5) {
char_vect[i] <- ("greater than 5") } else {
char_vect[i] <- ("less than 5")
}
}
Bien que les vecteurs je commencer avec différentes dans Dans les deux cas, la fonction est la même et remplace les vecteurs d'origine. Leurs valeurs ne devraient-elles donc pas être pertinentes tant que leurs longueurs sont équivalentes?
Quand je regarde ce que la sortie de la deuxième option est, je suis encore plus confus car il ressemble à une fonction écrasait quelques-unes des valeurs d'origine, mais pas tous ...
Mon instinct me dit est-ce que cela a à voir avec le fait que l'option 1 définit char_vect comme des entiers alors que l'option 2 est numérique? Mais je ne comprends pas pourquoi un opérateur de comparaison ne fonctionnerait pas de manière égale sur les nombres entiers et numériques. En regardant la sortie de l'option 2, il semble aussi y avoir des entiers sur lesquels la fonction n'a pas fonctionné.
merci beaucoup d'un novice R!
Voir aussi la fonction 'ifelse'. –
'i dans char_vect':' i' n'est pas un index numérique dans le second cas mais vous l'utilisez toujours comme un seul. – nrussell
merci à tous, évidemment avoir plus à apprendre - n'a pas pensé à travers les différences dans l'indexation de char_vect btwn. options 1 et 2 – ajuey