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一个额外的值


一般来说,尽量避免这样做,因为这不是一个好的做法。尽管在某些情况下,这种方式是唯一的。

这个问题对您有很好的启示: