在Matlab中,它会钻到你身上 - 预分配,预分配,预分配。如果你没有这样做,gremlins会吃cpu周期,你会成为一个坏人。在mat中预分配是否同样重要?
答案 0 :(得分:9)
因为在R中我们倾向于避免显式循环,所以它并不重要。很多功能都是为我们做的。当然,如果你坚持使用for
循环,你应该预先分配以避免在循环中增长一个对象(这是你可以做的最慢的操作之一)。相关阅读材料:The R Inferno。
答案 1 :(得分:2)
一些例子
test1=function(){
l=list()
for(i in 1:10000){
l=append(l,"abc")
}
return(l)
}
system.time(test1()) # 2.367 sec
test2=function(){
l=vector("list", 10000)
for(i in 1:10000){
l[i]="abc"
}
return(l)
}
system.time(test2()) # 0.015 sec
test3=function(){
l=list()
for(i in 1:10000){
l[i]="abc"
}
return(l)
}
system.time(test3()) # 0.309 sec
test4=function(){
return(lapply(1:10000, function(x) "abc"))
}
system.time(test4()) # 0.003
R for loop确实很糟糕:)
这是有问题的,因为它并不总是可读的将其改为lappy