varias superponer studio lineas graficos graficas funciones ejemplos r time profiling

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.



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.