R向量值覆盖函数

时间:2017-02-11 20:09:42

标签: r vector integer numeric overwrite

具体问题我正在解决:

创建一个长度为虹膜数量行数据集的字符向量,这样每个元素得到一个字符值 - 如果对应的'Sepal.Length'> gt,则为“大于5”。 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")
    }
}

虽然从这两种情况开始的矢量I&#39; m是不同的,但是函数是相同的并且覆盖了原始矢量,所以只要它们的长度相等,它们的值就不相关了吗?

当我看第二个选项的输出是什么时,我更加困惑,因为它看起来有些功能覆盖了一些原始值但不是全部...

我的预感是,这与选项1将char_vect定义为整数而选项2是数字这一事实有关吗?但我不明白为什么比较运算符对整数和数字不起作用。查看选项2的输出,似乎还有一个整数,该函数不起作用。

非常感谢R新手!

1 个答案:

答案 0 :(得分:-1)

你的第二个版本实际上没有意义。您可以通过更改for循环的主体来看到这一点:

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]中投放的i的值。