代码之家  ›  专栏  ›  技术社区  ›  NelsonGon phoxis

向函数添加进度条

  •  1
  • NelsonGon phoxis  · 技术社区  · 7 年前

    我看过几个问题,但找不到不使用循环的解决方案。我已经看过了 here here . 现在,如何添加与此函数完全同时工作的进度条:

    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 回复  |  直到 7 年前
        1
  •  2
  •   Humpelstielzchen    7 年前

    有一个包裹 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
    
    

    相当整洁。我不知道是否有用,但值得一看。