如何解决使用 doParallel + foreach
我正在使用发布 here 的示例代码来显示带有 progress_bar
+ progress
的 doParallel
(来自 foreach
包)。然而,那里的解决方案使用了 doSNow
(例如我用于测试的 Dewey brooke 的代码),它比 doParallel
更过时,并在构建带有 CRAN 标志的包时返回此注意:
使用被取代的包:‘doSNow (>= 1.0.19)’
改变这似乎并不像预期的那么简单。如果仅将 registerDoSNow
替换为 registerDoParallel
,并将 .options.sNow
替换为 .options.doparallel
,代码将运行,但在第二种情况下根本不会显示任何进度条。
我认为这可能与 .options.X
的使用有关。这部分代码对我来说非常模糊,因为 .options.sNow
在使用 doSNow
时确实有效,但是 foreach
手册页没有关于使用此参数的文档。因此,.options.doparallel
不起作用也就不足为奇了,因为这只是我的一个疯狂猜测。
在 pb$tick()
循环中包含对 foreach
的调用也不起作用,实际上会导致结果错误。所以我真的不知道我应该在代码中的什么地方包含它。
.options.sNow
来自哪里?应该去哪里pb$tick()
,这里如何使用progress_bar
显示doParallel
对象?
为方便起见,我将代码粘贴在代码下方(doSNow
替换为 doParallel
),但再次感谢 original source:
library(parallel)
library(doParallel)
numCores<-detectCores()
cl <- makeCluster(numCores)
registerDoParallel(cl)
# progress bar ------------------------------------------------------------
library(progress)
iterations <- 100 # used for the foreach loop
pb <- progress_bar$new(
format = "letter = :letter [:bar] :elapsed | eta: :eta",total = iterations,# 100
width = 60)
progress_letter <- rep(LETTERS[1:10],10) # token reported in progress bar
# allowing progress bar to be used in foreach -----------------------------
progress <- function(n){
pb$tick(tokens = list(letter = progress_letter[n]))
}
opts <- list(progress = progress)
# foreach loop ------------------------------------------------------------
library(foreach)
foreach(i = 1:iterations,.combine = rbind,.options.doparallel = opts) %dopar% {
summary(rnorm(1e6))[3]
}
stopCluster(cl)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。