【问题标题】:What exactly happens when looping "result_vector = c(result_vector, new_value)" [duplicate]循环“result_vector = c(result_vector,new_value)”时究竟会发生什么[重复]
【发布时间】:2019-08-20 23:27:08
【问题描述】:

这些天我是编程和使用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 

反对另一种选择,

result_vector = character(length(values))
system.time( for (i in 1:length(values)) result_vector[i] = values[i])

这给了我

   user  system elapsed 
  0.004   0.000   0.011 

为了从这个启示中学习,我想问一下当

result_vector = c(result_vector, new_value)

是不是每次迭代都会为result_vector重新分配一个新的空间,这会导致很多时间?

【问题讨论】:

标签: r


【解决方案1】:

对于每个迭代函数“c”,它正在重新分配新空间并将额外的参数附加到它的第一个,例如,它将 new_value 附加到 result_vector 重新分配 result_vector 一个额外的值。

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

【讨论】:

    猜你喜欢
    • 2015-12-25
    • 2023-04-01
    • 2015-10-23
    • 2011-01-18
    • 2017-07-29
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多