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 的值。
我正在解决的具体问题:
创建一个长度为 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 的值。