Existe-t-il un moyen normalisé dans R de mesurer le temps d'exécution d'une fonction?
Évidemment, je peux prendre system.time
avant et après l'exécution et ensuite prendre la différence de ceux-ci, mais je voudrais savoir s'il existe une méthode ou une fonction standardisée (je ne voudrais pas inventer la roue).
Je pense me souvenir d'avoir 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
proc.time
à l'esprit la causesystem.time
dont vous avez besoin.Rprof
c'est bien. Il fournit un profil de tous les processus dans un bloc / fonction de code.require(microbenchmark)
est maintenant (depuis quelques années) le moyen standard de la communauté pour chronométrer les choses.times <- microbenchmark( lm(y~x), glm(y~x), times=1e3); example(microbenchmark)
. Cela fait un statistique comparaisonlm
vsglm
plus de 1000 essais, plutôt que desystem.time
tester une seule fois.res <- microbenchmark(your code1,your code2)
et puisprint(res)
pour voir un tableau ouggplot2::autoplot(res)
pour voir un boxplot! refRéponses:
Une autre façon possible de le faire serait d'utiliser Sys.time ():
Pas la façon la plus élégante de le faire, par rapport à la réponse ci-dessus, mais certainement une façon de le faire.
la source
Sys.time
, veuillez lire ceci pour une mise en garde: Timing R code avec Sys.time ()system.time()
était plus rapide pour moi. Je pense que cette réponsesystem.time()
devrait être acceptée!La fonction intégrée le
system.time()
fera.Utilisez comme:
system.time(result <- myfunction(with, arguments))
la source
system.time()
a un argumentgcFirst
qui estTRUE
par défaut. Cela, d'une part, rend la mesure un peu plus reproductible, mais peut générer un surcoût significatif du temps d'exécution total (qui n'est pas mesuré, bien sûr).system.time(result <- myfunction(with, arguments))
et j'ai obtenu 187,564 en sortie - est-ce en quelques secondes ou quoi?system.time
, veuillez lire ceci pour une mise en garde: les erreurs «objet introuvable» et «symbole inattendu» lors du chronométrage du code R avec system.time () .Comme l'a dit Andrie, ça
system.time()
marche bien. Pour une fonction courte je préfère y mettrereplicate()
:la source
Une façon un peu plus agréable de mesurer le temps d'exécution consiste à utiliser le package rbenchmark . Ce package vous permet (facilement) de spécifier le nombre de fois pour répliquer votre test et la référence relative devrait être.
Voir également une question connexe sur stats.stackexchange
la source
microbenchmark
est un package léger (~ 50 Ko) et plus ou moins un moyen standard dans R pour comparer plusieurs expressions et fonctions:Par exemple:
Ici, les deux expressions ont été évaluées 10000 fois, avec un temps d'exécution moyen d'environ 25-30 ns.
la source
Il y a aussi
proc.time()
Vous pouvez utiliser de la même manière que
Sys.time
mais cela vous donne un résultat similaire àsystem.time
.la principale différence entre l'utilisation
est que la
proc.time()
méthode exécute toujours votre fonction au lieu de simplement mesurer le temps ... et au fait, j'aime utilisersystem.time
avec{}
inside pour que vous puissiez mettre un ensemble de choses ...la source
Le package "tictoc" vous donne un moyen très simple de mesurer le temps d'exécution. La documentation est dans: https://cran.fhcrc.org/web/packages/tictoc/tictoc.pdf .
Pour enregistrer le temps écoulé dans une variable, vous pouvez faire:
la source
Bien que d'autres solutions soient utiles pour une seule fonction, je recommande le morceau de code suivant où il est plus général et efficace:
la source
microbenchmark
ouprofvis
.Un autre moyen simple mais très puissant de le faire est d'utiliser le package
profvis
. Il ne mesure pas seulement 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.Cliquez ici pour quelques exemples.
la source
Vous pouvez utiliser de style Matlab
tic
-toc
fonctions, si vous préférez. Voir cette autre question SOFonction chronomètre en R
la source
proc.time()
… J'aime mieux le joli nom. =)