it-swarm.com.de

Ausführungszeit der Messfunktion in R

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

Natürlich kann ich system.time vor und nach der Ausführung und nehme dann den Unterschied davon, aber ich würde gerne wissen, ob es eine standardisierte Art oder Funktion gibt (möchte das Rad nicht erfinden).


Ich scheine mich zu erinnern, dass ich einmal so etwas 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
252
dns

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 obigen Antwort, aber definitiv eine Art, es zu tun.

228
Shreyes

Die eingebaute Funktion system.time() erledigt das.

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

169
Andrie

Wie Andrie sagte, funktioniert system.time() einwandfrei. Für kurze Funktion ziehe ich es vor, replicate() darin zu setzen:

system.time( replicate(10000, myfunction(with,arguments) ) )
56
Sacha Epskamp

Eine etwas schönere Methode zum Messen 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

36
csgillespie

Es gibt auch proc.time()

Sie können auf die gleiche Weise wie Sys.time Verwenden, aber Sie erhalten ein ähnliches Ergebnis wie bei system.time.

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

der Hauptunterschied zwischen der Verwendung von

system.time({ #your function here })

ist, dass die proc.time() -Methode immer noch Ihre Funktion ausführt, anstatt nur die Zeit zu messen ... und nebenbei möchte ich system.time mit {} in Ihnen verwenden kann eine Reihe von Dingen setzen ...

30

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()

So speichern Sie die verstrichene Zeit in einer Variablen:

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

microbenchmark ist ein leichtgewichtiges (~ 50 kB) Paket und mehr oder weniger eine Standardmethode 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 bis 30 ns betrug.

24
Davor Josipovic

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

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

Sie können auch MATLAB-ähnliche tic-toc -Funktionen verwenden. Siehe diese andere SO frage

Stoppuhrfunktion in R

11
Richie Cotton

Eine andere einfache, aber sehr leistungsfähige Methode ist die Verwendung des Pakets profvis. Es misst nicht nur die Ausführungszeit Ihres Codes, sondern gibt Ihnen einen Drilldown für jede von Ihnen ausgeführte Funktion. Es kann auch für Shiny verwendet werden.

library(profvis)

profvis({
  #your code here
})

Klicken Sie für einige Beispiele auf hier .

9
gianni