23
Analiza czasu wykonania kodu w R
Posted under GNU R by Artur SuchwałkoW poważnych obliczeniach (symulacje, praca na dużych danych) czas ich trwania ma znaczenie. Postanowiłem zacząć od tego tematu, ponieważ w praktyce często spotykam się z obliczeniami, które długo trwają oraz z dużymi zbiorami danych.
Jeśli chcemy oszacować czas działania funkcji (w przykładzie liczymy odchylenie standardowe z próby miliona wylosowanych liczb):
system.time(sd(rnorm(10^6)))
Czas wykonania można również wyznaczać dla fragmentu kodu:
czas.1 <- proc.time()
x <- rnorm(10^6)
hist(x)
czas.2 <- proc.time()
czas.2 - czas.1
Przy okazji warto porównać działanie dwóch wariantów funkcji seq: seq i seq_len. Jak wiadomo, funkcja seq służy do generowania wektorów składających się z równoodległych elementów. Druga funkcja jest jej szybszym wariantem szczególnym.
system.time(seq(1:10^8) -> x)
system.time(seq_len(1:10^8) -> x)
Okazuje się, że można znacznie przyspieszyć działanie kodu dzięki zastosowaniu bardziej starannie dobranych funkcji czy konstrukcji programistycznych. Do wektoryzacji operacji, efektywności kodu i podobnych operacji będę jeszcze wracał.
Do dokładniejszej oceny szybkości działania kodu można skorzystać z dostępnego w R profilera.
Przy okazji, popatrzmy na funkcję seq_along:
seq_along(LETTERS[6:10])
Taka ciekawostka, może się czasem przydać, szczególnie w pętlach.
