循环中cbind和rbind的交替
我在一个循环中生成一些变量,稍后一次一行存储到数据帧中。我觉得我使用了太多的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
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是的,基本上我是在填充来自其他计算的值,并将这些值合并到一个表中。