预分配在r

时间:2014-05-27 06:32:07

标签: r performance

在Matlab中,它会钻到你身上 - 预分配,预分配,预分配。如果你没有这样做,gremlins会吃cpu周期,你会成为一个坏人。在mat中预分配是否同样重要?

2 个答案:

答案 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