我在循环中生成一些变量,我后来一次将这些变量存储到数据帧中。我觉得我使用了太多的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()似乎在这里变慢。
答案 0 :(得分:1)
你甚至不需要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))