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
225
demandé sur quazgar 2011-06-07 11:55:52

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.

198
répondu Shreyes 2014-08-24 16:57:03

la fonction intégrée system.time() le fera.

utiliser comme: system.time(result <- myfunction(with, arguments))

155
répondu Andrie 2017-05-17 08:51:14

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) ) )
52
répondu Sacha Epskamp 2011-06-07 13:43:34

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

35
répondu csgillespie 2017-04-13 12:44:13

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

28
répondu Rodrigo de Alexandre 2014-11-26 00:14:32

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
22
répondu Anton 2015-10-27 17:45:24

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.

22
répondu Davor Josipovic 2018-02-05 10:01:42

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 )  )
14
répondu TPArrow 2016-06-03 18:16:25

vous pouvez utiliser les fonctions de type MATLAB tic - toc , si vous préférez. Voir cette autre question SO

fonction de chronomètre dans R

11
répondu Richie Cotton 2017-05-23 11:55:06

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.

7
répondu gianni 2018-04-19 16:17:14