r benchmarking execution-time milliseconds

Obtener tiempo de ejecución en milisegundos en R



benchmarking execution-time (3)

He leído una solución a esto usando las tic(), toc() functions

tic <- function(gcFirst = TRUE, type=c("elapsed", "user.self", "sys.self")) { type <- match.arg(type) assign(".type", type, envir=baseenv()) if(gcFirst) gc(FALSE) tic <- proc.time()[type] assign(".tic", tic, envir=baseenv()) invisible(tic) } toc <- function() { type <- get(".type", envir=baseenv()) toc <- proc.time()[type] tic <- get(".tic", envir=baseenv()) print(toc - tic) invisible(toc) } tic(); -----code---- toc(); elapsed 0.15

¿Pero me gustaría obtener mucha precisión en milisegundos?

También estaba usando esto

ptm <- proc.time() ---code proc.time() - ptm

y obtener esto

user system elapsed 1.55 0.25 1.84

¿Cómo conseguir más decimales o más precisión?


1) El tiempo depende del sistema operativo. En Windows solo puedes obtener milisegundos.

2) No es necesario definir tic() y toc() , R tiene system.time() . Aquí hay un ejemplo:

R> system.time(replicate(100, sqrt(seq(1.0, 1.0e6)))) user system elapsed 2.210 0.650 2.867 R>

3) Hay excelentes paquetes rbenchmark y microbenchmark .

3.1) rbenchmark es particularmente útil para la comparación de comandos, pero también puede usarse directamente:

R> library(rbenchmark) R> x <- seq(1.0, 1.0e6); benchmark(sqrt(x), log(x)) test replications elapsed relative user.self sys.self user.child sys.child 2 log(x) 100 5.408 2.85835 5.21 0.19 0 0 1 sqrt(x) 100 1.892 1.00000 1.62 0.26 0 0 R>

3.2) microbenchmark sobresale en las mediciones de precisión más alta:

R> library(microbenchmark) R> x <- seq(1.0, 1.0e6); microbenchmark(sqrt(x), log(x)) Unit: nanoseconds expr min lq median uq max 1 log(x) 50589289 50703132 55283301 55353594 55917216 2 sqrt(x) 15309426 15412135 15452990 20011418 39551819 R>

y este último, particularmente en Linux, ya te da nano-segundos . También puede trazar resultados, etc. así que eche un vistazo más de cerca a ese paquete.


Coloque start_time antes de su código y end_time después de su código.

es decir

start_time <- as.numeric(as.numeric(Sys.time())*1000, digits=15) # place at start -----code---- end_time <- as.numeric(as.numeric(Sys.time())*1000, digits=15) # place at end end_time - start_time # run time (in milliseconds)


Este es bueno:

options(digits.secs = 6) # This is set so that milliseconds are displayed start.time <- Sys.time() ...Relevant code... end.time <- Sys.time() time.taken <- end.time - start.time time.taken

Tomado de here .