如何在使用“foreach()”时创建一个进度条。函数在R? [英] How do you create a progress bar when using the "foreach()" function in R?
问题描述
编辑:在更新到doSNOW包后在使用%dopar%
时它显示出一个很好的进度条,并且它可以在Linux,Windows和OS X上运行
doSNOW
现在通过 .options.snow
参数正式支持进度条。 (b)>
library(doSNOW)
cl < - makeCluster(2)
registerDoSNOW(cl)
迭代< -100
pb< - txtProgressBar(max =迭代,样式= 3)
进度< - 函数(n)setTxtProgressBar(pb,n)
opts< - list (progress = progress)
result< - foreach(i = 1:iterations,.combine = rbind,
.options.snow = opts)%dopar%
{
s< ; - 总结(rnorm(1e6))[3]
return(s)
}
close(pb)
stopCluster(cl)
跟踪进度的另一种方法是,如果记住迭代总数,则设置 .verbose = T
,因为这会打印到控制台已经完成的迭代。
以前的Linux和OS X解决方案
在Ubuntu 14.04(64位)和OS X(El Capitan)上,即使使用%dopar%
如果在 makeCluster
函数中设置了 oufile =
它似乎不能在Windows下工作。从 makeCluster
的帮助:
$ b outfile:在哪里指定stdout和stderr连接输出工人。 表示没有重定向(这只对本地机器上的工作人员有用)。默认是'/ dev / null'(在Windows上是'nul:')。
$ b
示例代码:
library(foreach)
library(doSNOW)
cl < - makeCluster(4,outfile =)#核心数量。注意'outfile'
registerDoSNOW(c1)
迭代< - 100
pb < - txtProgressBar(min = 1,max = iterations,style = 3)
result< - foreach(i = 1:iterations,.combine = rbind)%dopar%
{
s < - summary(rnorm(1e6))[3]
setTxtProgressBar(pb,i)
return $ s
$ b close(pb)
stopCluster(cl)
这是进度条的外观。这看起来有点奇怪,因为每一个酒吧的每一个进程打印一个新的酒吧,因为一个工人可能会滞后一点,导致进度条偶尔来回。 there are some informative posts on how to create a counter for loops in an R program. However, how do you create a similar function when using the parallelized version with "foreach()"? Edit: After an update to the doSNOW package it has become quite simple to display a nice progress bar when using Yet another way of tracking progress, if you keep in mind the total number of iterations, is to set Previous solution for Linux and OS X On Ubuntu 14.04 (64 bit) and OS X (El Capitan) the progress bar is displayed even when using outfile: Where to direct the stdout and stderr connection output from the workers. "" indicates no redirection (which may only be useful for workers on the local machine). Defaults to ‘/dev/null’ (‘nul:’ on Windows). Example code: This is what the progress bar looks like. It looks a little odd since a new bar is printed for every progression of the bar and because a worker may lag a bit which causes the progress bar to go back and forth occasionally. 这篇关于如何在使用“foreach()”时创建一个进度条。函数在R?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!%dopar%
and it works on Linux, Windows and OS XdoSNOW
now officially supports progress bars via the .options.snow
argument.library(doSNOW)
cl <- makeCluster(2)
registerDoSNOW(cl)
iterations <- 100
pb <- txtProgressBar(max = iterations, style = 3)
progress <- function(n) setTxtProgressBar(pb, n)
opts <- list(progress = progress)
result <- foreach(i = 1:iterations, .combine = rbind,
.options.snow = opts) %dopar%
{
s <- summary(rnorm(1e6))[3]
return(s)
}
close(pb)
stopCluster(cl)
.verbose = T
as this will print to the console which iterations have been finished.%dopar%
if in the makeCluster
function oufile = ""
is set. It does not seem to work under Windows. From the help on makeCluster
:library(foreach)
library(doSNOW)
cl <- makeCluster(4, outfile="") # number of cores. Notice 'outfile'
registerDoSNOW(cl)
iterations <- 100
pb <- txtProgressBar(min = 1, max = iterations, style = 3)
result <- foreach(i = 1:iterations, .combine = rbind) %dopar%
{
s <- summary(rnorm(1e6))[3]
setTxtProgressBar(pb, i)
return(s)
}
close(pb)
stopCluster(cl)