我看了几个问题,但是找不到不使用循环的解决方案。我看过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)
}
谢谢。
答案 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
非常整洁。我不知道是否有帮助,但是值得一看。