R 循环时到底发生了什么;结果“U向量=c(结果”U向量,新的“U值”);
这些天来,我对编程和使用R 循环时到底发生了什么;结果“U向量=c(结果”U向量,新的“U值”);,r,R,这些天来,我对编程和使用R很陌生,为了将新值连接到结果向量,我一直在使用 values = sample(letters, 1e4, replace=TRUE) result_vector = NULL for (i in 1:length(values)) result_vector = c(result_vector, values[i]) 最近,当我测量上述数据时,我发现自己很可怜 result_vector = NULL system.time( for (i in 1:length(
R
很陌生,为了将新值连接到结果向量,我一直在使用
values = sample(letters, 1e4, replace=TRUE)
result_vector = NULL
for (i in 1:length(values)) result_vector = c(result_vector, values[i])
最近,当我测量上述数据时,我发现自己很可怜
result_vector = NULL
system.time( for (i in 1:length(values)) result_vector = c(result_vector, values[i]))
这给了我
user system elapsed
0.288 0.016 0.333
user system elapsed
0.004 0.000 0.011
反对另一种选择
result_vector = character(length(values))
system.time( for (i in 1:length(values)) result_vector[i] = values[i])
这给了我
user system elapsed
0.288 0.016 0.333
user system elapsed
0.004 0.000 0.011
为了从这个启示中学习,我想问一下,什么时候会发生什么
result_vector = c(result_vector, new_value)
是否为每次迭代重新分配一个新的空间,这会导致大量的时间?对于每个迭代函数“c”,它重新分配新的空间并将额外的参数附加到它的第一个参数,例如,它将一个新的参数值附加到结果向量重新分配结果向量fir一个额外的值
一般来说,尽量避免这样做,因为这不是一个好的做法。尽管在某些情况下,这种方式是唯一的。这个问题对您有很好的启示: