我有foreach
一个循环,它在每个循环中生成一个列表,以及一个.combine
将它们组合起来的函数,如下所示:
mergelists = function(x,xn) {
padlen = length(x[[1]])
for (n in names(x)[!names(x) %in% names(xn)]) xn[[n]] = 0
for (n in names(xn)[!names(xn) %in% names(x)]) xn[[n]] = c(rep(0,padlen), xn[[n]])
for (idx in names(xn)) { x[[idx]] = c( x[[idx]], xn[[idx]] ) }
x
}
前两个 for 循环修改新列表 ( xn
) 以使其与收集结果的列表 ( ) 兼容x
。最后一个加入x
并xn
进入x
。
我相信我的代码效率低得离谱,因为它重新分配了很多并使用了 for 循环。但我想不出更好的解决方案。有任何想法吗?
更多解释:我事先不知道列表名称(它们是在 foreach 部分进行的引导练习中的模式)。
例子:
> x
$foo
[1] 3 2
$bar
[1] 3 2
和
> xn
$foo
[1] 1
$baz
[1] 1
应该加入
> x
$foo
[1] 3 2 1
$bar
[1] 3 2 0
$baz
[1] 0 0 1
就是这样。