Sono sempre stato disturbato un po 'dalla mancanza di accuratezza che vedo il benchmark con system.time
e rbenchmark
(nel senso che la precisione dei tempi potrebbe mancare) e ho visto Hadley fare riferimento al pacchetto microbenchmark
di recente. Così ho deciso di dargli un vortice come visto di seguito. Ho snocciolato lo mean
contro f <- function(x) {sum(x)/length(x)}
e atteso mean
per fare meglio di f
ma i risultati, così come li ho capiti, non indicano che questo è vero.risultati imprevisti: microbenchmark
- Sono frainteso i risultati?
- È effettivamente più veloce della media?
- Il microbenchmark è ancora in fase beta e deve essere stirato fuori?
Sto eseguendo R2.15 su una macchina di successo 7 (come microbenchmark fa orari in modo diverso a seconda del sistema operativo).
I risultati
Unit: microseconds
expr min lq median uq max
1 f(x) 19.130 20.529 20.529 20.996 286.00
2 mean(x) 28.927 29.860 30.327 30.327 672.31
Il Codice
library(microbenchmark)
x <- 1:10000
f <- function(x) {sum(x)/length(x)}
mean(x)
res <- microbenchmark(
mean(x),
f(x),
times=1000L)
print(res)
boxplot(res)
Mi piace 'microbenchmark'. Se stai facendo più di uno o due risultati, il plotting può essere di grande aiuto, ma l'output di default è un po 'brutto. Ho scritto una funzione autoplot per ggplot2 che potrebbe apparire in una di queste versioni (controlla github nel frattempo). Esempi: http://stackoverflow.com/a/6919493/636656 –
Questo potrebbe spiegarlo http://radfordneal.wordpress.com/2014/02/02/inaccurate-results-from-microbenchmark/ – Momo
Probabilmente non come tutte le statistiche poiché 'f' era più basso e uno scatterplot lo indicava. Joran ha inchiodato questo. –