用cat作为进度条

时间:2017-01-23 23:36:06

标签: r progress-bar cat

我正在尝试创建一个简单的控制台进度条,以便我可以看到我的代码有多远。我知道存在内置选项,如txtProgressBar和winProgressBar,但我希望能够自己格式化一个。我希望它在同一行更新,而不是输出一系列行。

我目前有一些我认为应该工作的东西 - 有时候工作得很好 - 但有时也会以我不理解的方式出现故障。这是我的代码:

for(i in 1:10000){
  #Rest of my code
  cat('\r',paste("Working  [",strrep("#",i/n*50),strrep(" ",50-i/n*50),"]   ",ceiling(i/n*100),"%",sep=""))
}

据我所知,这应该每次都正确格式化。但是,当程序完成时,输出通常看起来像这样:

Working  [##################################################]   100%rking  [                                                 ]   5%

我无法弄清楚出了什么问题。 flush.console()和Sys.sleep似乎都没有帮助。任何建议或想法将不胜感激。如果重要,我正在使用RStudio。

2 个答案:

答案 0 :(得分:2)

以下在R控制台和Windows下的RStudio中都适用于我

n = 1000
cat("Working: ")
for(i in 1:n) {
    signal = floor(n/200)
    if(!(i %% signal)) { 
        prog = floor(i/n*50)
        cat('\r', "Working  [", strrep("#",prog), 
            strrep(" ", 50-prog), "] ", 2*prog, "%", sep="")
        flush.console() 
      }
    ## Pretend that some work is being done. 
    Sys.sleep(0.001)
    if(i == n) { cat(" \n\r") }
}

答案 1 :(得分:2)

已经有一个轮子了。无需重新发明:

library(dplyr)

n <- 10000
pb <- progress_estimated(n)
for(i in 1:n){
  pb$tick()$print()
  # your code goes here
}