我正在用%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个元素。
答案 0 :(得分:0)
更新我缺少“”。在软件包的前面,因此假设它是一个迭代器。 6包6结果。