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?
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.
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 .
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)