superponer - Medición del tiempo de ejecución de la función en R
superponer graficas en r (10)
¿Hay una forma estandarizada en R de medir el tiempo de ejecución de la función?
Obviamente, puedo tomar system.time
antes y después de la ejecución y luego tomar la diferencia de esos, pero me gustaría saber si hay alguna forma o función estandarizada (me gustaría no inventar la rueda).
Me parece recordar que una vez he usado algo como a continuación:
somesysfunction("myfunction(with,arguments)")
> Start time : 2001-01-01 00:00:00 # output of somesysfunction
> "Result" "of" "myfunction" # output of myfunction
> End time : 2001-01-01 00:00:10 # output of somesysfunction
> Total Execution time : 10 seconds # output of somesysfunction
Aunque otras soluciones son útiles para una sola función, recomiendo el siguiente código donde es más general y efectivo:
Rprof ( tf <- "log.log", memory.profiling = TRUE )
your code must be in between
Rprof ( NULL ) ; print ( summaryRprof ( tf ) )
Como dijo Andrie, system.time()
funciona bien. Para la función corta, prefiero poner replicate()
en ella:
system.time( replicate(10000, myfunction(with,arguments) ) )
El paquete "tictoc" le ofrece una forma muy sencilla de medir el tiempo de ejecución. La documentación se encuentra en: https://cran.fhcrc.org/web/packages/tictoc/tictoc.pdf .
install.packages("tictoc")
require(tictoc)
tic()
rnorm(1000,0,1)
toc()
Para guardar el tiempo transcurrido en una variable puede hacer:
install.packages("tictoc")
require(tictoc)
tic()
rnorm(1000,0,1)
exectime <- toc()
exectime <- exectime$toc - exectime$tic
La función system.time()
lo hará.
Utilice like: system.time(result <- myfunction(with, arguments))
Otra forma posible de hacer esto sería usar Sys.time ():
start.time <- Sys.time()
...Relevent codes...
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
No es la forma más elegante de hacerlo, en comparación con la respuesta anterior, pero definitivamente es una forma de hacerlo.
Otra forma simple pero muy poderosa de hacerlo es usando el paquete profvis
. No solo mide el tiempo de ejecución de su código, sino que le brinda un desglose de cada función que ejecuta. También se puede usar para Shiny.
library(profvis)
profvis({
#your code here
})
Haga clic here para ver algunos ejemplos.
Puede utilizar las funciones tic
- toc
MATLAB, si lo prefiere. Ver esta otra pregunta SO
También hay proc.time()
Puede usar de la misma manera que Sys.time
pero le da un resultado similar a system.time
.
ptm <- proc.time()
#your function here
proc.time() - ptm
la principal diferencia entre usar
system.time({ #your function here })
es que el método proc.time()
aún ejecuta su función en lugar de medir el tiempo ... y, por cierto, me gusta usar system.time
con {}
dentro para que pueda poner un conjunto de cosas ...
Una forma ligeramente mejor de medir el tiempo de ejecución, es usar el paquete rbenchmark . Este paquete (fácilmente) le permite especificar cuántas veces debe replicar su prueba y cuál debería ser la referencia relativa.
Vea también una pregunta relacionada en stats.stackexchange
microbenchmark
es un paquete liviano (~ 50kB) y más o menos una forma estándar en R para realizar evaluaciones comparativas de múltiples expresiones y funciones:
microbenchmark(myfunction(with,arguments))
Por ejemplo:
> microbenchmark::microbenchmark(log10(5), log(5)/log(10), times = 10000)
Unit: nanoseconds
expr min lq mean median uq max neval cld
log10(5) 0 0 25.5738 0 1 10265 10000 a
log(5)/log(10) 0 0 28.1838 0 1 10265 10000
Aquí, las dos expresiones se evaluaron 10000 veces, con un tiempo de ejecución medio de alrededor de 25-30 ns.