保存多巴并行的每个指数的结果

时间:2018-03-26 07:29:59

标签: r foreach

我正在使用foreach循环,并希望保存每个索引的结果以便以后访问它们。 我的代码比这更复杂,但这是一个解释我的问题的示例代码。

    w <- function(x){
    add = i+1
    multiply = i*2

    returned_values = list("add" = add, "mult" = multiply)
    }

    result <- foreach(i=1:length(new_data)) %dopar% w(i)
result$add
result$mult

有没有办法存储所有凹痕的结果。

1 个答案:

答案 0 :(得分:2)

默认情况下,foreach会将结果作为列表返回,每个元素都对应一次迭代。

实现您想要的一种简单方法是在每次迭代时将中间结果存储在对象(例如dataframe,list,...)中,然后合并所有结果:

library(parallel)
library(doParallel)


cl <- makeCluster(parallel::detectCores())
registerDoParallel(cl)   #create a cluster



res <- foreach(i=1:10) %dopar% {

  data.frame(index=i,times2 = i*2)

}

stopCluster(cl)

这将为您提供结果列表:

  res[1:2]
# [[1]]
# index times2
# 1     1      2
# 
# [[2]]
# index times2
# 1     2      4

您现在可以将结果与do.call

结合使用
do.call(rbind,res)
#    index times2
# 1      1      2
# 2      2      4
# 3      3      6
# 4      4      8
# 5      5     10
# 6      6     12
# 7      7     14
# 8      8     16
# 9      9     18
# 10    10     20

通过将.combine = 'rbind'作为参数添加到foreach调用,可以实现相同的输出。