foreach:如何在多个迭代中组合列表中的两个矩阵?

时间:2015-06-17 10:06:50

标签: r foreach

我希望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)

1 个答案:

答案 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)))
}