конкретная проблема я хочу решить:R значений вектора Переписать в функции
Создать вектор символов длиной числа-строк-оф-радужки-набор, таким образом, что каждый элемент получает значение символа - «больше 5», если соответствующая «Sepal.Length»> 5, иначе она должна быть «меньше 5».
Это работает:
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")
}
}
Но по какой-то причине, если я определяю char_vect следующим образом, я получаю смешные ответы:
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")
}
}
Хотя векторы я трогание с различающимися по в двух случаях функция одна и та же и перезаписывает исходные векторы, поэтому их значения не должны иметь значения, если их длины эквивалентны?
Когда я смотрю на то, что выход второго варианта, я еще более запутанной, так как это выглядит, как некоторые функции переписал некоторые из исходных значений, но не все из них ...
Подозреваю заключается в том, что это связано с тем, что параметр 1 определяет char_vect как целые числа, а параметр 2 является числовым? Но я не понимаю, почему оператор сравнения не будет работать одинаково на целых и числовых. Глядя на вывод опции 2, также кажется, что целые числа не работают.
большое спасибо R новичка!
См. Также функцию 'ifelse'. –
'i in char_vect':' i' не является числовым индексом во втором случае, но вы все еще используете его как один. – nrussell
спасибо всем, очевидно, больше узнать - не продумайте различия в индексировании char_vect btwn. варианты 1 и 2 – ajuey