Messen der Ausführungszeit der function in R

Gibt es einen standardisierten Weg zur Messung der Ausführungszeit der function in R?

system.time kann ich system.time vor und nach der Ausführung nehmen und dann die Differenz davon nehmen, aber ich würde gerne wissen, ob es einen standardisierten Weg oder eine function gibt (möchte das Rad nicht erfinden).


Ich glaube mich zu erinnern, dass ich einmal etwas wie unten benutzt habe:

 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 

Eine andere Möglichkeit wäre Sys.time () zu verwenden:

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

Nicht die eleganteste Art, es zu tun, verglichen mit der Antwort oben, aber definitiv ein Weg, es zu tun.

Die eingebaute function system.time() wird es tun.

Verwenden Sie wie system.time(result < - myfunction(with, arguments)) : system.time(result < - myfunction(with, arguments))

Wie Andrie sagte, system.time() gut. Für kurze function bevorzuge ich replicate() darin:

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

Eine etwas bessere Art, die Ausführungszeit zu messen, ist das rbenmark- Paket. Mit diesem Paket (einfach) können Sie angeben, wie oft der Test repliziert werden soll und ob der relative Benchmark verwendet werden soll.

Siehe auch eine verwandte Frage unter stats.stackexchange

Es gibt auch proc.time()

Sie können genauso wie Sys.time aber Sie erhalten ein ähnliches Ergebnis wie bei system.time .

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

der Hauptunterschied zwischen der Verwendung

 system.time({ #your function here }) 

ist, dass die proc.time() -Methode immer noch Ihre function ausführt, anstatt nur die Zeit zu messen ... und übrigens, ich benutze system.time mit {} innen, damit Sie eine Menge Dinge setzen können ...

microbenchmark ist ein leichtgewichtiges (~ 50kB) Paket und mehr oder weniger ein Standard-Weg in R zum Benchmarking mehrerer Ausdrücke und functionen:

 microbenchmark(myfunction(with,arguments)) 

Beispielsweise:

 > 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 

Hier wurden beide Ausdrücke 10000 mal ausgewertet, wobei die mittlere Ausführungszeit etwa 25-30 ns betrug.

Das Paket “tictoc” bietet Ihnen eine sehr einfache Möglichkeit, die Ausführungszeit zu messen. Die Dokumentation befindet sich in: https://cran.fhcrc.org/web/packages/tictoc/tictoc.pdf .

 install.packages("tictoc") require(tictoc) tic() rnorm(1000,0,1) toc() 

Um die verstrichene Zeit in einer Variablen zu speichern, können Sie Folgendes tun:

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

Obwohl andere Lösungen für eine einzelne function nützlich sind, empfehle ich den folgenden Codeabschnitt, der allgemeiner und effektiver ist:

 Rprof ( tf < - "log.log", memory.profiling = TRUE ) your code must be in between Rprof ( NULL ) ; print ( summaryRprof ( tf ) ) 

Sie können MATLAB- toc tic toc functionen verwenden, wenn Sie dies bevorzugen. Sehen Sie sich diese andere SO Frage an

Stoppuhr-function in R

Eine weitere einfache, aber sehr wirkungsvolle Möglichkeit ist das Verwenden des Pakets profvis . Es misst nicht nur die Ausführungszeit Ihres Codes, sondern gibt Ihnen einen Drilldown für jede ausgeführte function. Es kann auch für Shiny verwendet werden.

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

Klicken Sie hier für einige Beispiele.