R 向量值在函数中覆盖

R Vector Values Overwrite in Function

我正在解决的具体问题:

创建一个长度为 number-of-rows-of-iris-dataset 的字符向量,这样,每个元素都有一个字符值——“大于 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新手!

你的第二个版本实际上没有意义。您可以通过像这样更改 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 的值。