【发布时间】:2015-04-05 14:10:28
【问题描述】:
我想知道使用foreach%dopar%循环后是否可以输出两个不同的对象。
我将尝试解释我在寻找什么。假设由于循环内的几个操作,我有两个 data.frame:
library(doMC)
library(parallel)
registerDoMC(cores=4)
result <- foreach(i=1:100) %dopar% {
#### some code here
#### some code here
vec1 <- result_from_previous code # It would be the 1st object I'd like to ouput
vec2 <- result_from_previous code # It would be the 2nd object I'd like to output
}
我想要的输出是长度为 2 的 data.frames 列表,例如:
dim(result[[1]]) # equals to nrow=length(vec1) and ncol=100
dim(result[[2]]) # equals to nrow=length(vec2) and ncol=100
我在之前的帖子Saving multiple outputs of foreach dopar loop中尝试过这个:
comb <- function(x, ...) {
lapply(seq_along(x), function(i) c(x[[i]], lapply(list(...), function(y) y[[i]])))
result <- foreach(i=1:100, .comb='comb', .multicombine=TRUE) %dopar% {
#### some code here
#### some code here
vec1 <- result_from_previous code
vec2 <- result_from_previous code
list(vec1, vec2)
}
但它没有给出预期的结果
当我执行以下操作时:
result <- foreach(i=1:100, .comb=cbind) %dopar% {
#### some code here
#### some code here
vec1 <- result_from_previous code
vec2 <- result_from_previous code
}
我只获得vec2的data.frame。有没有办法返回或保存两个输出?
谢谢
【问题讨论】:
标签: r foreach parallel-processing