如何在使用“foreach()”时创建一个进度条。函数在R? [英] How do you create a progress bar when using the "foreach()" function in R?

查看:424
本文介绍了如何在使用“foreach()”时创建一个进度条。函数在R?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有一些关于如何在R程序中创建循环计数器的信息。但是,如何在使用foreach()的并行化版本时创建类似的函数?解析方案

编辑:在更新到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 %dopar% and it works on Linux, Windows and OS X

doSNOW 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) 

Yet another way of tracking progress, if you keep in mind the total number of iterations, is to set .verbose = T as this will print to the console which iterations have been finished.

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 %dopar% if in the makeCluster function oufile = "" is set. It does not seem to work under Windows. From the help on makeCluster:

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:

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) 

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆