【发布时间】:2013-11-16 11:33:34
【问题描述】:
我想知道是否/如何将多个输出作为foreach dopar 循环的一部分返回。
让我们举一个非常简单的例子。假设我想在 foreach 循环中执行 2 次操作,并希望为 i 的每个值返回或保存这两个操作的结果。
对于只有一个输出返回,它会很简单:
library(foreach)
library(doParallel)
cl <- makeCluster(3)
registerDoParallel(cl)
oper1 <- foreach(i=1:100000) %dopar% {
i+2
}
oper1 将是一个包含 100000 个元素的列表,每个元素都是针对 i 的每个值的 i+2 操作的结果。
假设现在我想分别返回或保存两个不同操作的结果,例如i+2 和 i+3。我尝试了以下方法:
oper1 = list()
oper2 <- foreach(i=1:100000) %dopar% {
oper1[[i]] = i+2
return(i+3)
}
希望i+2的结果会保存在oper1列表中,第二次操作i+3的结果会被foreach返回。但是,列表中没有填充任何内容oper1!在这种情况下,只有i+3 的结果会从循环中返回。
有没有办法在两个单独的列表中返回或保存两个输出?
【问题讨论】:
-
为什么不简单地
return(c(i+2,i+3))?如果您确实需要将它们放在单独的列表中,您可以在foreach返回后执行此操作。 -
这是一个非常简单的例子。在我的实际(真实)示例中,这两个操作的结果具有不同的结构(矩阵和向量)或(列表和标量)。那就不行了..
-
在您的问题中提及这会很有用...在这种情况下,请使用
return(list(i+2,i+3))。
标签: r foreach parallel-processing