Siempre me han molestado un poco por la falta de precisión Veo marcas de banco con system.time
y rbenchmark
(en que la precisión del tiempo puede no existir) y vi referencia Hadley el paquete microbenchmark
recientemente. Así que decidí darle un giro como se ve a continuación. Me enfrenté mean
contra f <- function(x) {sum(x)/length(x)}
y esperaba mean
para hacer mucho mejor que f
pero los resultados, tal como los entiendo, no indican que esto sea cierto.resultados inesperados: microbenchmark
- ¿Entiendo mal los resultados?
- ¿Es f realmente más rápido que malo?
- ¿Está microbenchmark todavía en fase beta y necesita plancharse ?
Estoy ejecutando R2.15 en una máquina de ganar 7 (como microbenchmark hace los tiempos de forma diferente dependiendo de su sistema operativo).
Los resultados
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
El Código
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)
Me gusta 'microbenchmark'. Si está haciendo más de uno o dos resultados, el trazado puede ser de gran ayuda, pero la salida predeterminada es un poco desagradable. Escribí una función autoplot para ggplot2 que puede aparecer en una de estas versiones (compruebe github mientras tanto). Ejemplos: http://stackoverflow.com/a/6919493/636656 –
Esto puede explicarlo http://radfordneal.wordpress.com/2014/02/02/inaccurate-results-from-microbenchmark/ – Momo
Probablemente no como todas las estadísticas para el 'f' eran más bajos y un diagrama de dispersión indicó esto también. joran clavó este. –