【发布时间】:2017-06-30 01:25:27
【问题描述】:
我正在解决的具体问题:
创建一个长度为 number-of-rows-of-iris-dataset 的字符向量,这样,每个元素都有一个字符值——如果相应的 'Sepal.Length' > 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")
}
}
虽然我开始使用的向量在这两种情况下是不同的,但函数是相同的,并且会覆盖原始向量,所以只要它们的长度相等,它们的值不应该是不相关的吗?
当我查看第二个选项的输出时,我更加困惑,因为看起来有些函数覆盖了一些原始值,但不是全部......
我的直觉是,这与选项 1 将 char_vect 定义为整数而选项 2 是数字的事实有关?但我不明白为什么比较运算符不能在整数和数字上同样工作。查看选项 2 的输出,似乎还有该函数无法处理的整数。
非常感谢 R 新手!
【问题讨论】:
-
另见
ifelse函数。 -
i in char_vect:i在第二种情况下不是数字索引,但您仍然像使用它一样使用它。 -
谢谢大家,显然还有更多的东西要学 - 没有考虑过 char_vect btwn 索引的差异。选项 1 和 2
标签: r vector integer numeric overwrite