Gibt es in R eine standardisierte Methode zur Messung der Ausführungszeit der Funktion?
Natürlich kann ich system.time
vor und nach der Ausführung nehmen und dann den Unterschied davon nehmen, aber ich würde gerne wissen, ob es einen standardisierten Weg oder eine standardisierte Funktion gibt (möchte das Rad nicht erfinden).
Ich scheine mich zu erinnern, dass ich einmal etwas wie das Folgende 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
proc.time
im Sinn, weilsystem.time
Sie eine brauchen.Rprof
ist schön. Es bietet ein Profil aller Prozesse in einem Codeblock / einer Codefunktion.require(microbenchmark)
ist jetzt (seit ein paar Jahren) der Community-Standard für die Zeitmessung.times <- microbenchmark( lm(y~x), glm(y~x), times=1e3); example(microbenchmark)
. Dies macht einen statistischen Vergleich derlm
gegenglm
über 1000 versucht, anstattsystem.time
nur einmal zu testen.res <- microbenchmark(your code1,your code2)
und dannprint(res)
, um eine Tabelle oderggplot2::autoplot(res)
ein Boxplot zu sehen! refAntworten:
Eine andere Möglichkeit wäre die Verwendung von Sys.time ():
Nicht die eleganteste Art, es zu tun, verglichen mit der obigen Antwort, aber definitiv eine Art, es zu tun.
quelle
Sys.time
, lesen Sie bitte diese für einige Einschränkung: Timing R-Code mit Sys.time ()system.time()
war schneller für mich. Ich denke, dass die Antwort fürsystem.time()
akzeptiert werden sollte!Die eingebaute Funktion
system.time()
wird es tun.Verwenden Sie wie:
system.time(result <- myfunction(with, arguments))
quelle
system.time()
es ein Argument gibt,gcFirst
dasTRUE
standardmäßig verwendet wird. Dies macht einerseits die Messung etwas reproduzierbarer, kann jedoch einen erheblichen Overhead der Gesamtlaufzeit erzeugen (was natürlich nicht gemessen wird).system.time(result <- myfunction(with, arguments))
und habe 187.564 als Ausgabe erhalten - ist das in Sekunden oder was?system.time
, lesen Sie bitte für einige Einschränkung: „Objekt nicht gefunden“ und „unerwartetes Symbol“ Fehler beim Timing R Code mit system.time () .Wie Andrie sagte,
system.time()
funktioniert gut. Für eine kurze Funktion ziehe ichreplicate()
es vor:quelle
Eine etwas schönere Methode zur Messung der Ausführungszeit ist die Verwendung des Pakets rbenchmark . Mit diesem Paket können Sie (einfach) angeben, wie oft Ihr Test repliziert werden soll und wie hoch der relative Benchmark sein soll.
Siehe auch eine verwandte Frage unter stats.stackexchange
quelle
microbenchmark
ist ein leichtes (~ 50 kB) Paket und mehr oder weniger eine Standardmethode in R zum Benchmarking mehrerer Ausdrücke und Funktionen:Beispielsweise:
Hier wurden beide Ausdrücke 10000 Mal ausgewertet, wobei die mittlere Ausführungszeit etwa 25 bis 30 ns betrug.
quelle
Es gibt auch
proc.time()
Sie können auf die gleiche Weise wie verwenden,
Sys.time
aber es gibt Ihnen ein ähnliches Ergebnis wiesystem.time
.der Hauptunterschied zwischen der Verwendung
ist, dass die
proc.time()
Methode Ihre Funktion immer noch ausführt, anstatt nur die Zeit zu messen ... und übrigens, ich verwende sie gernesystem.time
mit{}
inside, damit Sie eine Reihe von Dingen einfügen können ...quelle
Das Paket "tictoc" bietet Ihnen eine sehr einfache Möglichkeit, die Ausführungszeit zu messen. Die Dokumentation finden Sie unter: https://cran.fhcrc.org/web/packages/tictoc/tictoc.pdf .
So speichern Sie die verstrichene Zeit in einer Variablen:
quelle
Obwohl andere Lösungen für eine einzelne Funktion nützlich sind, empfehle ich den folgenden Code, der allgemeiner und effektiver ist:
quelle
microbenchmark
oder erforderlich istprofvis
.Eine andere einfache, aber sehr leistungsfähige Möglichkeit, dies zu tun, ist die Verwendung des Pakets
profvis
. Es misst nicht nur die Ausführungszeit Ihres Codes, sondern gibt Ihnen auch einen Drilldown für jede Funktion, die Sie ausführen. Es kann auch für Shiny verwendet werden.Klicken Sie hier für einige Beispiele.
quelle
Sie können MATLAB-Stil verwenden
tic
-toc
Funktionen, wenn Sie es vorziehen. Siehe diese andere SO-FrageStoppuhrfunktion in R.
quelle
proc.time()
... Ich mag den süßen Namen besser. =)