23.09

2008

Analiza czasu wykonania kodu w R

Autor: artur

W 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: seqseq_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.

Spróbuj ponownie