进度条会产生开销。您应该问的问题是由进度条创建的开销值得花费额外的时间来向您显示计算中的位置。在我的大部分计算中,这是值得的,因为它们可能需要几分钟的时间,进度条只会增加额外时间的一小部分,但是会提供很多信息。
此外还有更多的软件包使用进度条,其功能比txtProgressBar
函数要快一些。
下面是一些比较。第一个功能没有进度条。你可以看到来自包进度的进度条比来自R的进度条快一些。周围还有一些进度条,比如pbapply。在Github的进度页面上,您可以找到一个rcpp示例。
mysum0 <- function(n){
s <- 0
for (i in 1: n){
s = s + i
}
s
}
mysum1 = function(n){
s=0
for (i in 1: n){
s = s + i
pb = txtProgressBar(min = 0, max = n, initial = 0, style = 3)
setTxtProgressBar(pb, i)
}
close(pb)
s
}
library(progress)
mysum2 <- function(n){
pb <- progress_bar$new(total = n, clear = FALSE)
s <- 0
pb$tick(0)
for (i in 1: n){
s <- s + i
pb$tick()
}
s
}
mb <- microbenchmark::microbenchmark(mysum0(1000),
mysum1(1000),
mysum2(1000),
times = 100L)
pirnt(mb)
print(mb, unit = "eps")
print(mb, unit = "relative")
> mb
Unit: microseconds
expr min lq mean median uq max neval
mysum0(1000) 272.091 288.4745 319.0893 297.252 307.492 2108.846 100
mysum1(1000) 121191.322 124239.9035 125913.9429 125777.652 127380.937 133798.170 100
mysum2(1000) 76761.331 80152.6575 82717.5762 81554.361 83240.735 132357.554 100
> print(mb, unit = "eps") # how iterations test per second
Unit: evaluations per second
expr min lq mean median uq max neval
mysum0(1000) 474.192995 3252.120061 3307.531315 3364.14894 3466.514469 3675.241004 100
mysum1(1000) 7.473944 7.850468 7.945014 7.95054 8.048948 8.251416 100
mysum2(1000) 7.555292 12.013414 12.151598 12.26176 12.476193 13.027393 100
> print(mb, unit = "relative") # relative to the first function tested
Unit: relative
expr min lq mean median uq max neval
mysum0(1000) 1.0000 1.0000 1.0000 1.0000 1.0000 1.00000 100
mysum1(1000) 445.4073 430.6790 394.6041 423.1348 414.2577 63.44615 100
mysum2(1000) 282.1164 277.8501 259.2302 274.3610 270.7086 62.76302 100
谢谢。这非常有帮助。 +1 – overwhelmed