ggtitle - ggplot title center



Messen der Ausführungszeit der Funktion in R (7)

Gibt es einen standardisierten Weg zur Messung der Ausführungszeit der Funktion 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 Funktion 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

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

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

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


Eine etwas bessere Art, die Ausführungszeit zu messen, ist das rbenchmark 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


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 Funktion. Es kann auch für Shiny verwendet werden.

library(profvis)

profvis({
  #your code here
})

Klicken Sie here für einige Beispiele.


Obwohl andere Lösungen für eine einzelne Funktion 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 Funktionen verwenden, wenn Sie dies bevorzugen. Sehen Sie sich diese andere SO Frage an

Stoppuhr-Funktion in R


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

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.





profiling