358 Stimmen

Messung der Ausführungszeit von Funktionen in R

Gibt es in R eine standardisierte Methode zur Messung der Ausführungszeit einer Funktion?

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


Ich glaube mich zu erinnern, dass ich einmal etwas Ähnliches wie das Folgende verwendet 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

327voto

Shreyes Punkte 3451

Eine andere Möglichkeit, dies zu tun, wäre die Verwendung von Sys.time():

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

Verglichen mit der obigen Antwort ist dies zwar nicht die eleganteste Lösung, aber auf jeden Fall eine Möglichkeit.

220voto

Andrie Punkte 169813

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

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

64voto

Sacha Epskamp Punkte 44955

Wie Andrie sagte, system.time() funktioniert gut. Für kurze Funktionen ziehe ich es vor, die replicate() darin:

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

56voto

Davor Josipovic Punkte 4818

microbenchmark ist ein leichtgewichtiges (~50kB) Paket und mehr oder weniger ein Standardverfahren in R für das Benchmarking mehrerer Ausdrücke und Funktionen:

microbenchmark(myfunction(with,arguments))

Zum Beispiel:

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

41voto

Außerdem gibt es proc.time()

Sie können in der gleichen Weise verwenden wie Sys.time aber es liefert ein ähnliches Ergebnis wie 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 führt dennoch Ihre Funktion aus, anstatt nur die Zeit zu messen... und nebenbei bemerkt, ich verwende gerne system.time con {} innen, so dass man eine Reihe von Dingen hineinlegen kann...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X