【发布时间】:2012-10-05 01:38:25
【问题描述】:
我提前为这个问题道歉,但我已经很难找到解决方案。
如何在变量中生成由 for 循环生成的值?
例如:
myfunction <- function(x=1:5) {
for(i in 1:length(x)) {
r<-x[i]
}
print(r)
}
如果我运行上面的代码,我只会得到 x 的最后一个值,在这种情况下是 5。我知道这是因为我每次都通过 for 循环覆盖 r。
我也试过了:
myfunction <- function(x=1:5) {
for(i in 1:length(x)) {
r[i]<-x[i]
}
print(r)
}
但我仍然只是得到最后一个值。
我找到的唯一解决方案是在使用 r 之前指定将保存生成值的变量的长度
myfunction <- function(x=1:5) {
r<-numeric(5)
for(i in 1:length(x)) {
r[i]<-x[i]
}
print(r)
}
但是如果我事先不知道要返回的向量的长度,这个方案显然是不够的。
感谢您的帮助!
【问题讨论】:
-
print打印值,它不保存任何内容,最后一个解决方案是正确的解决方案,如果您使用 for 循环,您将始终知道长度,例如r <- numeric(length(x))- 但希望您的函数比这更复杂,因为x <- r会做你想做的事情,否则(不需要循环)你的 for 循环也会评估为for i in 5,这就是为什么只有 1 个值! -
我真正的问题是我正在遍历一个目录,并且我想将每个文件中两列的相关性放在一个向量中,但前提是它们具有一定数量的非缺失值.在运行循环之前,我不知道有多少文件超过了阈值。
-
使用
lapply并运行一个匿名函数来进行关联(或在必要时返回 NA),不需要(显式)循环!
标签: r function vector for-loop