test <- c(0,1,2,3,4,4,4)
for(i in test) {
savethis <- c(i)
}
print(savethis)
无论我尝试什么,这总是输出4。我想将所有向量值保存到savethis中。
答案 0 :(得分:3)
我假设您不想复制向量test
。如果没有,基本上可以使用两种方式使用for
循环来完成所需的工作。
一个(如果您知道输出的大小)。
例如,如果您知道输出的大小与输入的大小相同,则可以事先创建输出向量,然后在循环中使用标准索引分配值。
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)
或者像上面的第一个示例一样,使用test
的索引。
savethis <- NULL
for(i in seq_along(test)) {
savethis[i] <- test[i]
}
print(savethis)
请注意,尽管此循环使用与第一个完全相同的指令,但它的工作方式完全不同。循环length(savethis)
之前为零。因此,值savethis[1]
不存在,它是在循环中第一次创建的,然后是savethis[2]
,等等。
如果您知道输出的大小,则上面的第一个示例始终是最好的。另外两个迫使R反复调用内存管理例程,这浪费了处理时间。