進度條會產生開銷。您應該問的問題是由進度條創建的開銷值得花費額外的時間來向您顯示計算中的位置。在我的大部分計算中,這是值得的,因爲它們可能需要幾分鐘的時間,進度條只會增加額外時間的一小部分,但是會提供很多信息。
此外還有更多的軟件包使用進度條,其功能比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