web-dev-qa-db-fra.com

obtenir le temps d'exécution en millisecondes en R

J'ai lu une solution à cela en utilisant 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 

Mais j'aimerais avoir beaucoup de précision en millisecondes?

J'utilisais aussi ceci 

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

et obtenir ceci 

   user  system elapsed 
   1.55    0.25    1.84 

Comment obtenir plus de décimales ou plus de précision? 

21
cMinor

1) Le minutage dépend du système d'exploitation. Sous Windows, vous ne pouvez obtenir que des millisecondes.

2) Nul besoin de définir tic() et toc(), R a system.time(). Voici un exemple:

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

3) Il existe d’excellents paquetages complémentaires rbenchmark et microbenchmark

3.1) rbenchmark est particulièrement utile pour la comparaison de commandes, mais peut également être utilisé directement:

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) micro-référence excelle aux mesures de précision les plus élevées:

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> 

et ce dernier, en particulier sous Linux, vous donne déjà des nanosecondes . Il peut également tracer les résultats, etc., donc examinez de plus près ce package.

33
Dirk Eddelbuettel

Celui-ci est bien:

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

Tiré de ici .

6
Denis Rasulev

Placez start_time avant votre code et end_time après votre code. 

c'est à dire.

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)
0
user5783745