首页 > 解决方案 > 为什么当我对任何东西运行 for 循环时,R 只保存最后一个结果?

问题描述

test <- c(0,1,2,3,4,4,4)
for(i in test) {
   savethis <- c(i)
}
print(savethis)

无论我尝试什么,这总是输出 4。我想将所有向量值保存到 savethis 中。

标签: r

解决方案


我假设您不想只复制 vector testfor如果没有,基本上有两种方法可以使用循环来做你想做的事情。

,如果你知道输出的大小。

例如,如果您知道输出与输入的大小相同,您可以预先创建一个输出向量,并在循环中使用标准索引分配值。

test <- c(0, 1, 2, 3, 4, 4, 4)

savethis <- numeric(length(test))    # Do this outside the loop

for(i in seq_along(test)) {
   savethis[i] <- test[i]
}
print(savethis)

另一个,如果您不知道输出的大小。

在这种情况下,您应该在循环外创建一个长度为零的向量,并在循环内扩展该向量

savethis <- NULL

for(i in test) {
   savethis <- c(savethis, i)
}
print(savethis)

或者使用索引 into test,就像上面的第一个示例一样。

savethis <- NULL

for(i in seq_along(test)) {
   savethis[i] <- test[i]
}
print(savethis)

请注意,尽管此循环使用与第一个完全相同的指令,但它以完全不同的方式工作。在循环length(savethis)为零之前。所以该值savethis[1]不存在,它是第一次通过循环创建的,然后savethis[2],等等。

如果您确实知道输出的大小,那么上面的第一个示例总是最好的。另外两个迫使 R 一遍又一遍地调用内存管理例程,浪费处理时间。


推荐阅读