向功能添加进度条

时间:2019-02-11 14:07:20

标签: r function progress-bar

我看了几个问题,但是找不到不使用循环的解决方案。我看过herehere。 现在,我如何添加与此功能完全相同的进度条:

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

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

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)

}

谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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