Mesure du temps d'exécution de la fonction en R
Existe-t-il une méthode normalisée pour mesurer le temps d'exécution de la fonction?
évidemment je peux prendre system.time
avant et après l'exécution et puis prendre la différence de ceux-ci, mais je voudrais savoir s'il y a une manière ou une fonction normalisée (voudrait ne pas inventer la roue).
il me semble me rappeler que j'ai déjà utilisé quelque chose comme ci-dessous:
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
10 réponses
une Autre façon de faire serait d'utiliser Sys.heure ():
start.time <- Sys.time()
...Relevent codes...
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
Pas la façon la plus élégante de le faire, par rapport à la answere ci-dessus , mais certainement une façon de le faire.
la fonction intégrée system.time()
le fera.
utiliser comme: system.time(result <- myfunction(with, arguments))
comme disait Andrie, system.time()
fonctionne très bien. Pour la fonction courte je préfère mettre replicate()
en elle:
system.time( replicate(10000, myfunction(with,arguments) ) )
une façon légèrement plus agréable de mesurer le temps d'exécution, est d'utiliser le paquet rbenchmark . Ce paquet (facilement) vous permet de spécifier combien de temps pour répliquer votre test et le test devrait être.
Voir aussi une question connexe à stats.stackexchange
il y a aussi proc.time()
Vous pouvez utiliser de la même manière que Sys.time
, mais il vous donne un résultat similaire à system.time
.
ptm <- proc.time()
#your function here
proc.time() - ptm
la principale différence entre l'utilisation de
system.time({ #your function here })
est que la méthode proc.time()
exécute toujours votre fonction au lieu de simplement mesurer le temps...
et au fait, j'aime utiliser system.time
avec {}
à l'intérieur pour que vous puissiez mettre un ensemble de choses...
le paquet" tictoc " vous donne une façon très simple de mesurer le temps d'exécution. La documentation est dans: https://cran.fhcrc.org/web/packages/tictoc/tictoc.pdf .
install.packages("tictoc")
require(tictoc)
tic()
rnorm(1000,0,1)
toc()
pour enregistrer le temps écoulé dans une variable, vous pouvez faire:
install.packages("tictoc")
require(tictoc)
tic()
rnorm(1000,0,1)
exectime <- toc()
exectime <- exectime$toc - exectime$tic
microbenchmark
est un léger (~50 ko) et plus ou moins façon standard dans R pour l'analyse comparative de plusieurs expressions et fonctions:
microbenchmark(myfunction(with,arguments))
par exemple:
> 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
ici les deux expressions ont été évaluées 10000 fois, le temps moyen d'exécution étant d'environ 25-30 ns.
bien que d'autres solutions soient utiles pour une seule fonction, je recommande le morceau de code suivant où est plus général et efficace:
Rprof ( tf <- "log.log", memory.profiling = TRUE )
your code must be in between
Rprof ( NULL ) ; print ( summaryRprof ( tf ) )
vous pouvez utiliser les fonctions de type MATLAB tic
- toc
, si vous préférez. Voir cette autre question SO
une autre façon simple mais très puissante de le faire est d'utiliser le paquet profvis
. Il ne se contente pas de mesurer le temps d'exécution de votre code, mais vous donne un exercice vers le bas pour chaque fonction que vous exécutez. Il peut être utilisé pour le Brillant.
library(profvis)
profvis({
#your code here
})
cliquez sur ici pour quelques exemples.