我希望foreach
每次迭代都在列表中返回两个矩阵。通过将自定义函数acomb()
传递给.combine
参数,此返回值应与先前的迭代结合使用。保留矩阵的返回列表不应简单地组合在一起,以使用.combine="list"
或.combine="c"
形成更长的列表。相反,应该分别堆叠两个矩阵以构建两个三维数组。
如果我执行两次迭代(1:2
),以下代码按预期工作,但如果我增加迭代次数,则会收到错误:
require("foreach")
require("abind")
acomb <- function(old, new) list(abind(old$a, new$a, along=3), abind(old$b, new$b, along=3))
foreach(1:3, .combine=acomb, .multicombine=TRUE) %do% {
list(a=cbind(c(1,2),c(3,4)), b=cbind(c(1,2),c(3,4),c(5,6)))
}
返回的错误是:
Error in { : unused Argument (result.3)
答案 0 :(得分:1)
您的函数只接受两个参数。因此,您必须设置.multicombine = FALSE
。由于函数需要通过类似Reduce
的方法来应用,因此必须在返回值中命名列表元素。
acomb <- function(old, new) list(a = abind(old$a, new$a, along=3),
b = abind(old$b, new$b, along=3))
foreach(1:3, .combine=acomb) %do% {
list(a=cbind(c(1,2),c(3,4)), b=cbind(c(1,2),c(3,4),c(5,6)))
}