问题
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()
}
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)
}
Thanks.
回答1:
There is a package pbapply
, which provides a progress bar for apply-functions using:
pblapply(X, FUN, ..., cl = NULL)
It works just like a normal apply
-function.
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.
来源:https://stackoverflow.com/questions/54632346/add-a-progress-bar-to-a-function