如何使foreach%doparalell%执行所有迭代?

时间:2019-05-02 19:38:50

标签: r foreach doparallel snow

我正在用%dopar%建立一个foreach循环。内部函数应执行n次。但是,无论功能是什么,该功能仅执行6次。没有错误。如何让foreach执行所有迭代?

我尝试更改makePSOCKcluster()内部的数字,结果是相同的。当前,我正在运行 makePSOCKcluster(nworkers),其中 nworkers = 7 (parallel :: detectCores()返回8)。我原本是在循环内运行一个复杂的函数,但是尝试将其替换为诸如 sqrt()之类的简单函数,却得到相同的结果。我在Mac上工作: R版本3.5.1(2018-07-02) 平台:x86_64-apple-darwin15.6.0(64位) 运行于:macOS 10.14.2

使用软件包版本: doParallel_1.0.11 iterators_1.0.10 foreach_1.4.4

suppressPackageStartupMessages( library(foreach) )
suppressPackageStartupMessages( library(doParallel) )

nworkers <- parallel::detectCores() -1 
cl <- makePSOCKcluster(nworkers)
registerDoParallel(cl)

epkgs = c("lubridate","dplyr","tidyr","doParallel","foreach", "Rcpp")
efuns = ls(globalenv())

foreach( i= 1:31, packages = epkgs, .export = efuns) %dopar% { sqrt(i)} 

我得到的结果是:

[[1]]
[1] 1

[[2]]
[1] 1.414214

[[3]]
[1] 1.732051

[[4]]
[1] 2

[[5]]
[1] 2.236068

[[6]]
[1] 2.44949

这些函数应该返回31个元素。

1 个答案:

答案 0 :(得分:0)

更新我缺少“”。在软件包的前面,因此假设它是一个迭代器。 6包6结果。