回复 第3楼 的 Microhimalaya:
越来越慢?一般不会这样。除非是没有事先显式给定 list 长度。
指定长度后一般时间随循环步数线性增长。而动态扩充做相同步数耗时更长,而且不是线性增长。
<br />
x = vector('list', 10000)<br />
system.time(for(i in 1:10000) x[[i]] = rnorm(10))<br />
# 用户 系统 流逝<br />
# 0.116 0.000 0.116<br />
x = vector('list', 20000)<br />
system.time(for(i in 1:20000) x[[i]] = rnorm(10))<br />
# 用户 系统 流逝<br />
# 0.223 0.003 0.242<br />
x = vector('list', 30000)<br />
system.time(for(i in 1:30000) x[[i]] = rnorm(10))<br />
# 用户 系统 流逝<br />
# 0.356 0.000 0.363<br />
x = vector('list', 40000)<br />
system.time(for(i in 1:40000) x[[i]] = rnorm(10))<br />
# 用户 系统 流逝<br />
# 0.477 0.000 0.495<br />
x = vector('list', 50000)<br />
system.time(for(i in 1:50000) x[[i]] = rnorm(10))<br />
# 用户 系统 流逝<br />
# 0.61 0.00 0.62 </p>
<p>x = list()<br />
system.time(for(i in 1:10000) x[[i]] = rnorm(10))<br />
# 用户 系统 流逝<br />
# 0.876 0.000 0.887<br />
x = list()<br />
system.time(for(i in 1:20000) x[[i]] = rnorm(10))<br />
# 用户 系统 流逝<br />
# 3.216 0.000 3.306<br />
x = list()<br />
system.time(for(i in 1:30000) x[[i]] = rnorm(10))<br />
# 用户 系统 流逝<br />
# 7.296 0.003 7.433<br />
x = list()<br />
system.time(for(i in 1:40000) x[[i]] = rnorm(10))<br />
# 用户 系统 流逝<br />
# 13.412 0.117 13.692<br />
x = list()<br />
system.time(for(i in 1:50000) x[[i]] = rnorm(10))<br />
# 用户 系统 流逝<br />
# 21.149 0.120 21.880<br />
</p>