R:并行执行嵌套在具有依赖性的顺序循环中

时间:2016-01-29 16:34:36

标签: r parallel-processing

假设我有两个函数f1f2f2旨在将f1的输出作为参数,而f1旨在使用自己的输出来更新它。在循环开始之前,初始化f1的输出。然后在每次迭代中,f2f1获取先前的输出并执行,然后f1执行以更新其自己的输出。两个向量将分别从f1f2收集顺序输出。以下代码是一个简单的工作示例:

f1 <- function(x) return(x + pi)
f2 <- function(x) return(log(x))

f1.result <- res1 <- f1(1)
f2.result <- NULL

for(i in 2:100) { ## Need to parallelize these two lines ##
  res2 <- f2(res1); f2.result <- c(f2.result, res2)
  res1 <- f1(res1); f1.result <- c(f1.result, res1)
}

我希望并行化循环中的两个执行,即让它们同时运行。我如何在R中实现这一目标?我熟悉foreach的基础知识,但无法弄清楚这一点。感谢。

1 个答案:

答案 0 :(得分:0)

好吧,我想我想出来了。它实际上非常简单。我使用doParallel包:

f1 <- function(x) return(x + pi)
f2 <- function(x) return(log(x))

f1.result <- res1 <- f1(1)
f2.result <- NULL

library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
getDoParWorkers()

for(j in 2:100) {
  res <- foreach(i = 1:2, .combine = c) %dopar% {
    if(i==1) res <- f1(res1)
    else res <- f2(res1)
  }
  res1 <- res[1]; f1.result <- c(f1.result, res1)
  res2 <- res[2]; f2.result <- c(f2.result, res2)
}

stopCluster(cl)