使用 cat 作为进度条
Using cat for a progress bar
我正在尝试制作一个简单的控制台内进度条,以便我可以查看我的代码执行了多远。我知道存在内置选项,如 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。
以下内容在 Windows
下的 R 控制台和 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") }
}
已经有轮子了。不需要 re-invent:
library(dplyr)
n <- 10000
pb <- progress_estimated(n)
for(i in 1:n){
pb$tick()$print()
# your code goes here
}
我正在尝试制作一个简单的控制台内进度条,以便我可以查看我的代码执行了多远。我知道存在内置选项,如 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。
以下内容在 Windows
下的 R 控制台和 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") }
}
已经有轮子了。不需要 re-invent:
library(dplyr)
n <- 10000
pb <- progress_estimated(n)
for(i in 1:n){
pb$tick()$print()
# your code goes here
}