Czy istnieje znormalizowany sposób pomiaru czasu wykonania funkcji w R?
Oczywiście mogę wziąć system.time
przed i po wykonaniu, a następnie wziąć różnicę między nimi, ale chciałbym wiedzieć, czy istnieje jakiś znormalizowany sposób lub funkcja (nie chciałbym wymyślać koła).
Wydaje mi się, że pamiętam, że kiedyś użyłem czegoś takiego:
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
na myśli przyczynę,system.time
której potrzebujesz.Rprof
jest miło. Zapewnia profil wszystkich procesów w części / funkcji kodu.require(microbenchmark)
jest teraz (od kilku lat) standardowym sposobem społeczności na mierzenie czasu.times <- microbenchmark( lm(y~x), glm(y~x), times=1e3); example(microbenchmark)
. To robi statystycznego porównanialm
vsglm
ponad 1000 prób, zamiastsystem.time
testowania tylko raz.res <- microbenchmark(your code1,your code2)
a następnie,print(res)
aby zobaczyć tabelę lubggplot2::autoplot(res)
wykres pudełkowy! refOdpowiedzi:
Innym możliwym sposobem zrobienia tego byłoby użycie Sys.time ():
Nie jest to najbardziej elegancki sposób na zrobienie tego w porównaniu do powyższej odpowiedzi, ale zdecydowanie sposób na zrobienie tego.
źródło
Sys.time
, przeczytaj to dla pewnego zastrzeżenia: Czas R kod za pomocą Sys.time ()system.time()
było dla mnie szybsze. Myślę, że ta odpowiedźsystem.time()
powinna zostać zaakceptowana!Wbudowana funkcja
system.time()
to zrobi.Użyj jak:
system.time(result <- myfunction(with, arguments))
źródło
system.time()
ma argumentgcFirst
, który jestTRUE
domyślnie. To z jednej strony sprawia, że pomiar jest nieco bardziej powtarzalny, ale może generować znaczny narzut całkowitego czasu pracy (który nie jest mierzony, oczywiście).system.time(result <- myfunction(with, arguments))
i otrzymałem 187,564 jako wynik - czy to w kilka sekund czy co?system.time
, przeczytaj to, aby uzyskać pewne zastrzeżenie: błędy „nie znaleziono obiektu” i „nieoczekiwany symbol” podczas pomiaru kodu R za pomocą system.time () .Jak powiedział Andrie,
system.time()
działa dobrze. Dla krótkiej funkcji wolę w to wstawićreplicate()
:źródło
Nieco lepszym sposobem mierzenia czasu wykonania jest użycie pakietu rbenchmark . Ten pakiet (łatwo) pozwala określić, ile razy należy powtórzyć test i czy powinien to być względny test porównawczy.
Zobacz także powiązane pytanie na stronie stats.stackexchange
źródło
microbenchmark
jest lekkim (~ 50kB) pakietem i mniej więcej standardowym sposobem w R do testowania wielu wyrażeń i funkcji:Na przykład:
Tutaj oba wyrażenia zostały ocenione 10000 razy, a średni czas wykonania wynosił około 25-30 ns.
źródło
Jest również
proc.time()
Możesz używać w ten sam sposób,
Sys.time
ale daje to podobny wyniksystem.time
.główna różnica między używaniem
jest to, że
proc.time()
metoda nadal ma wykonywać swoją funkcję, a nie tylko pomiar czasu ... a przy okazji, chciałbym skorzystaćsystem.time
z{}
wewnątrz, dzięki czemu można umieścić zestaw rzeczy ...źródło
Pakiet „tictoc” zapewnia bardzo prosty sposób pomiaru czasu wykonania. Dokumentacja znajduje się w: https://cran.fhcrc.org/web/packages/tictoc/tictoc.pdf .
Aby zapisać upływający czas w zmiennej, możesz:
źródło
Chociaż inne funkcje są przydatne dla jednej funkcji, zalecam następujący fragment kodu, który jest bardziej ogólny i skuteczny:
źródło
microbenchmark
lubprofvis
.Innym prostym, ale bardzo skutecznym sposobem na to jest użycie pakietu
profvis
. Nie tylko mierzy czas wykonania kodu, ale daje dogłębną analizę każdej wykonywanej funkcji. Można go również użyć do Shiny.Kliknij tutaj, aby zobaczyć kilka przykładów.
źródło
Możesz użyć stylu MATLAB
tic
-toc
funkcje, jeśli wolisz. Zobacz inne pytanie SOFunkcja stopera w R.
źródło
proc.time()
Już miałam dodać … Bardziej podoba mi się ta urocza nazwa. =)