假设我有两个函数f1
和f2
。 f2
旨在将f1
的输出作为参数,而f1
旨在使用自己的输出来更新它。在循环开始之前,初始化f1
的输出。然后在每次迭代中,f2
从f1
获取先前的输出并执行,然后f1
执行以更新其自己的输出。两个向量将分别从f1
和f2
收集顺序输出。以下代码是一个简单的工作示例:
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
的基础知识,但无法弄清楚这一点。感谢。
答案 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)