Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

get execution time in milliseconds in R

Tags:

I have read a solution to this using 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  

But I would like to get a lot of precision in milliseconds?

Also I was using this

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

and get this

   user  system elapsed     1.55    0.25    1.84  

How to get more decimals or more precision?

like image 866
edgarmtze Avatar asked Sep 25 '11 16:09

edgarmtze


People also ask

How do I get the execution time in R?

Call the tic() function, then place any R expression or code or function(), then end it with toc() function call. It will print the execution time of the sleep_func().


2 Answers

1) Timing is operating-system dependent. On Windows you may only get milliseconds.

2) No need to define tic() and toc(), R has system.time(). Here is an example:

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

3) There are excellent add-on packages rbenchmark and microbenchmark.

3.1) rbenchmark is particularly useful for comparison of commands, but can also be used directly:

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 excels at highest precision measurements:

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>  

and this last one, particularly on Linux, already gives you nano-seconds. It can also plot results etc so have a closer look at that package.

like image 148
Dirk Eddelbuettel Avatar answered Oct 27 '22 13:10

Dirk Eddelbuettel


This one is good:

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 

Taken from here.

like image 36
Denis Rasulev Avatar answered Oct 27 '22 13:10

Denis Rasulev