循环中的cbind和rbind的替代

时间:2013-08-02 18:21:02

标签: r

我在循环中生成一些变量,我后来一次将这些变量存储到数据帧中。我觉得我使用了太多的cbind和rbind,这使代码效率低下。什么是以下结构的替代品。

Sys.time()
outData = c()
for (i in 1:40000)
{
  a=0; b=0; c=0;d=0;e=0;f=0;g=0
  #newline = cbind(a,cbind(b,cbind(c,cbind(d,cbind(e,f)))))
  newline = do.call(cbind, list(a,b,c,d,e,f,g))
  outData = rbind(outData, newline)
}
Sys.time()

编辑: do.call()似乎在这里变慢。

1 个答案:

答案 0 :(得分:1)

编辑基于OP中的新代码:

你甚至不需要cbind。只是你分配给a,b,c,d ... pyt,直接进入data.frame。或者在最坏的情况下

newline=data.frame(a,b,c,d...,etc) 

<小时/>

低效率最有可能来自一次生成i == 1000个单行数据帧。可能有一个更有效的解决方案。

关于复杂的cbind行,请尝试以下方法:

    #instead of:
    newline = cbind(a,cbind(b,cbind(.......z,cbind(a1,a2))))))

    # try: 
    newline = do.call(cbind, list(a, b, ..., z))