Medir el tiempo de ejecución de la función en R

¿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 aquellos, 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 usé algo como lo siguiente:

 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 

Otra forma posible de hacerlo 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.

La función system.time() lo hará.

Usa como: system.time(result <- myfunction(with, arguments))

Como dijo Andrie, system.time() funciona bien. Para la función corta, prefiero poner replicate() en ella:

 system.time( replicate(10000, myfunction(with,arguments) ) ) 

Una forma un poco más agradable 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 el punto de referencia relativo.

Ver también una pregunta relacionada en stats.stackexchange

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() todavía ejecuta tu función en lugar de simplemente medir el tiempo ... y, por cierto, me gusta usar system.time con {} interior para que puedas poner un conjunto de cosas ...

microbenchmark es un paquete liviano (~ 50kB) y más o menos una forma estándar en R para la evaluación comparativa 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í ambas expresiones se evaluaron 10000 veces, con un tiempo medio de ejecución de alrededor de 25-30 ns.

El paquete “tictoc” le ofrece una forma muy sencilla de medir el tiempo de ejecución. La documentación está 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 

Aunque otras soluciones son útiles para una función única, recomiendo el siguiente fragmento de código donde sea más general y efectivo:

 Rprof ( tf <- "log.log", memory.profiling = TRUE ) your code must be in between Rprof ( NULL ) ; print ( summaryRprof ( tf ) ) 

Puede usar funciones de tictoc estilo MATLAB, si lo prefiere. Ver esta otra pregunta SO

Función de cronómetro en R

Otra forma simple pero muy poderosa de hacer esto es usar el paquete profvis . No solo mide el tiempo de ejecución de su código, sino que le proporciona un desglose para cada función que ejecuta. También se puede usar para Shiny.

 library(profvis) profvis({ #your code here }) 

Haga clic aquí para algunos ejemplos.