Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环中cbind和rbind的交替_R - Fatal编程技术网

循环中cbind和rbind的交替

循环中cbind和rbind的交替,r,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

我在一个循环中生成一些变量,稍后一次一行存储到数据帧中。我觉得我使用了太多的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()在这里似乎较慢。

根据OP中的新代码进行编辑: 您甚至不需要
cbind
。不管你给a,b,c,d分配什么。。。把它放到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))

似乎您需要类似于
do.call(cbind,…)
的内容,但您应该澄清您的问题..投票结束时的范围太广。需要提供更好的问题描述和测试数据。您在a、b、c等中实际投入了什么?当然不是0。如果没有一种方法可以在一个快照中
lappy
这是一个长文本和数字的混合体,我会感到惊讶。这些是向量还是单个值(如您的示例所示)?请描述一下你真正想做什么。当然,您不希望data.frame只包含零。当然,如果您想为循环使用
,您应该预先分配(但可能还有更好的选择)。谢谢。我尝试了代码,但
do.call
似乎较慢。但是,这更方便您确定要
cbind
它们吗??也许你的意思是“rbind”
?在这种情况下,您可以使用data.table包中的rbindlist是的,基本上我是在填充来自其他计算的值,并将这些值合并到一个表中。