在R中并行循环

Alb*_*dor 8 parallel-processing r while-loop

我想知道是否/如何在R中并行化while循环.

如果不可能或合理地认为难以完成,我将非常感谢另一种选择,可能使用并行for循环.

Hen*_*ikB 10

您可以将期货与任何循环R构造(包括for()while()循环)一起使用.期货在未来的套餐中实施(我是作者).

目前尚不清楚您想要用于while循环的条件.这将有助于提供更准确的答案.这里就是同时状况确实的示例依赖于任何的计算结果的:

library("listenv")
library("future")
plan(multiprocess, workers = 2L)

res <- listenv()

ii <- 1L
while (ii <= 5) {
  ## This is evaluated in parallel and will only block
  ## if all workers are busy.
  res[[ii]] %<-% {
    list(iteration = ii, pid = Sys.getpid())
  }
  ii <- ii + 1L
}

## Resolve all futures (blocks if not already finished)
res <- as.list(res)

str(res)
List of 5
 $ :List of 2
  ..$ iteration: int 1
  ..$ pid      : int 15606
 $ :List of 2
  ..$ iteration: int 2
  ..$ pid      : int 15608
 $ :List of 2
  ..$ iteration: int 3
  ..$ pid      : int 15609
 $ :List of 2
  ..$ iteration: int 4
  ..$ pid      : int 15610
 $ :List of 2
  ..$ iteration: int 5
  ..$ pid      : int 15611
Run Code Online (Sandbox Code Playgroud)

如果你希望你的while条件依赖于一个或多个并行结果(in res[[ii]])的结果,那么事情会变得复杂得多,因为那时你需要弄清楚如果未来(=并行任务)仍未发生会发生什么解决; 你应该检查一下,比如说,之后再进行5次迭代,或者你应该等一下.这是并行算法的设计问题,而不是如何实现.一切皆有可能.

PS.我不明白这个问题得到的支持.这可能是因为你的问题措辞不清楚/不太清楚 - 记得尽可能地尽可能地"帮助帮助者帮助你".如果downvotes是因为while循环,我(显然)请求不同意.