我正在使用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
有没有办法存储所有凹痕的结果。
答案 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
调用,可以实现相同的输出。