2017-02-11 6 views
-2

конкретная проблема я хочу решить: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 новичка!

+0

См. Также функцию 'ifelse'. –

+0

'i in char_vect':' i' не является числовым индексом во втором случае, но вы все еще используете его как один. – nrussell

+0

спасибо всем, очевидно, больше узнать - не продумайте различия в индексировании char_vect btwn. варианты 1 и 2 – ajuey

ответ

-1

Ваша вторая версия на самом деле не имеет смысла. Вы можете видеть, что, изменяя тело вашего для петли, как это:

char_vect <- iris$Sepal.Length 
for (i in char_vect) { 
    cat(i, "\n") 
} 
5.1 
4.9 
4.7 
4.6 
5 
5.4 
... Output truncated 

Таковы значения г, что вы кладете в iris$Sepal.Length[i] и char_vect[i].

Смежные вопросы