向功能添加进度条 [英] Add a progress bar to a function

查看:88
本文介绍了向功能添加进度条的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我看了几个问题,但是找不到不使用循环的解决方案.我在此处

I've looked at a couple of questions but couldn't find a solution that doesn't use loops. I've looked here and here. Now, how could I add a progress bar that works exactly at the same time as this function:

prog<-function(){
  print("This is a test")
  Sys.sleep(05)
  setTxtProgressBar()
}

上面是一个虚拟函数,我想到了使用 system.time 来捕获执行打印命令所花费的时间,并将其用于进度条.我如何在不使用for循环的情况下完成这项工作?编辑我试过了,但是还是很慢:

The above is a dummy function and I thought of using system.time to capture the time it takes for the print command to execute and use this for the progress bar. How could I make this work, without using a for loop? EDIT I tried this but it is still slow:

prog<-function(y=sort(runif(200)),...){
  pb<-txtProgressBar(...)
  values<-c(0,y,1)
  lapply(values, function(x){
    Sys.sleep(0.5) 
    setTxtProgressBar(pb,x)})
  Sys.sleep(1)
  close(pb)

}

谢谢.

推荐答案

有一个软件包 pbapply ,它为使用以下功能的应用功能提供了进度条:

There is a package pbapply, which provides a progress bar for apply-functions using:

pblapply(X, FUN, ..., cl = NULL)

它的工作原理类似于普通的 apply 功能.

It works just like a normal apply-function.

此函数: pblapply(1:10,function(x){Sys.sleep(02); print(x)})给出了这样的输出:

This function: pblapply(1:10, function(x) {Sys.sleep(02); print(x)}) gave this output:

|                                                  | 0 % ~calculating  [1] 1
   |+++++                                             | 10% ~18s          [1] 2
   |++++++++++                                        | 20% ~16s          [1] 3
   |+++++++++++++++                                   | 30% ~14s          [1] 4
   |++++++++++++++++++++                              | 40% ~12s          [1] 5
   |+++++++++++++++++++++++++                         | 50% ~10s          [1] 6
   |++++++++++++++++++++++++++++++                    | 60% ~08s          [1] 7
   |+++++++++++++++++++++++++++++++++++               | 70% ~06s          [1] 8
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~04s          [1] 9
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~02s          [1] 10
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 20s

非常整洁.我不知道是否有帮助,但是值得一看.

Pretty neat. I don't know if it helps, but worth taking a look.

这篇关于向功能添加进度条的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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