プログレスバーがオーバーヘッドを作成します。あなたが求めるべき質問は、あなたがあなたの計算のどこにいるかを示すために余分な時間を費やす価値があるプログレスバーによって作られたオーバーヘッドです。ほとんどの私の計算では、数分かかる場合があり、プログレスバーに余分な時間を追加するだけで多くの情報が追加されるので、それは価値があります。
さらに、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