Temps d’exécution de la fonction de mesure en R

Existe-t-il un moyen normalisé en R de mesurer le temps d’exécution de la fonction?

Evidemment, je peux prendre system.time avant et après l’exécution, puis prendre la différence, mais j’aimerais savoir s’il existe une méthode ou une fonction normalisée (ne pas inventer la roue).


Je 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 

Une autre façon de procéder serait d’utiliser Sys.time ():

 start.time <- Sys.time() ...Relevent codes... end.time <- Sys.time() time.taken <- end.time - start.time time.taken 

Ce n'est pas la manière la plus élégante de le faire, comparé à la réponse ci-dessus, mais certainement une façon de le faire.

La fonction system.time() fera.

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

Comme Andrie l’a dit, system.time() fonctionne bien. Pour une fonction courte, je préfère y mettre replicate() :

 system.time( replicate(10000, myfunction(with,arguments) ) ) 

Un moyen légèrement plus efficace de mesurer le temps d’exécution consiste à utiliser le package rbenchmark . Ce package (facilement) vous permet de spécifier combien de fois vous devez répliquer votre test et le benchmark relatif devrait être.

Voir aussi une question connexe sur stats.stackexchange

Il y a aussi proc.time()

Vous pouvez utiliser de la même manière que Sys.time mais vous obtenez un résultat similaire à system.time de system.time .

 ptm <- proc.time() #your function here proc.time() - ptm 

la principale différence entre l'utilisation

 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 j'aime d'ailleurs utiliser system.time avec {} pour que vous puissiez mettre un ensemble de choses ...

microbenchmark est un package léger (~ 50 Ko) et plus ou moins standard dans R pour évaluer 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, avec un temps d’exécution moyen d’environ 25-30 ns.

Le package “tictoc” vous offre un moyen très simple de mesurer le temps d’exécution. La documentation se trouve 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 que vous pouvez faire:

 install.packages("tictoc") require(tictoc) tic() rnorm(1000,0,1) exectime <- toc() exectime <- exectime$toc - exectime$tic 

Bien que d’autres solutions soient utiles pour une seule fonction, je recommande le code suivant où il 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 tictoc style MATLAB, si vous préférez. Voir cette autre question SO

Fonction chronomètre en R

Un autre moyen simple mais très puissant de le faire est d’utiliser le package profvis . Il ne se contente pas de mesurer le temps d’exécution de votre code mais vous donne un aperçu de chaque fonction que vous exécutez. Il peut également être utilisé pour Shiny.

 library(profvis) profvis({ #your code here }) 

Cliquez ici pour quelques exemples.