O: jak używać pakietu microbenchmark do pomiaru czasu wykonania
Możesz użyć pakietu microbenchmark w R, aby porównać czas wykonania różnych wyrażeń.
Aby to zrobić, możesz użyć następującej składni:
library (microbenchmark) #compare execution time of two different expressions microbenchmark( expression1, expression2) )
Poniższy przykład pokazuje, jak zastosować tę składnię w praktyce.
Przykład: użycie microbenchmark() w R
Załóżmy, że mamy w R następującą ramkę danych zawierającą informacje o punktach zdobytych przez zawodników różnych drużyn koszykarskich:
#make this example reproducible
set. seed ( 1 )
#create data frame
df <- data. frame (team=rep(c(' A ', ' B '), each= 500 ),
points=rnorm( 1000 , mean= 20 ))
#view data frame
head(df)
team points
1 A 19.37355
2 A 20.18364
3 A 19.16437
4 A 21.59528
5 A 20.32951
6 A 19.17953
Załóżmy teraz, że chcemy obliczyć średnią punktów zdobytych przez graczy w każdej drużynie przy użyciu dwóch różnych metod:
- Metoda 1 : Użyj Aggregate() z Base R
- Metoda 2 : Użyj group_by() i summarise_at() z dplyr
Możemy użyć funkcji microbenchmark() do pomiaru czasu potrzebnego na wykonanie każdego z tych wyrażeń:
library (microbenchmark) library (dplyr) #time how long it takes to calculate mean value of points by team microbenchmark( aggregate(df$points, list(df$team), FUN=mean), df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean)) ) Unit: milliseconds express aggregate(df$points, list(df$team), FUN = mean) df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean)) min lq mean median uq max neval cld 1.307908 1.524078 1.852167 1.743568 2.093813 4.67408 100 a 6.788584 7.810932 9.946286 8.914692 10.239904 56.20928 100 b
Funkcja microbenchmark() uruchamia każde wyrażenie 100 razy i mierzy następujące metryki:
- min : Minimalny czas wymagany do wykonania
- lq : dolny kwartyl (25. percentyl) czasu wymaganego do ukończenia
- Średnia : Średni czas wymagany do wykonania
- mediana : średni czas wykonania
- uq : górny kwartyl (75. percentyl) czasu wymaganego do wykonania
- max : Maksymalny czas wymagany do wykonania
- neval : Liczba ocen każdego wyrażenia
Zwykle patrzymy tylko na średni lub średni czas potrzebny na wykonanie każdego wyrażenia.
Z wyniku możemy zobaczyć:
- Obliczenie średniej punktów zespołu przy użyciu metody opartej na R zajęło średnio 1852 milisekund .
- Obliczenie średniej liczby punktów na drużynę przy użyciu metody dplyr zajęło średnio 9,946 milisekundy .
Na podstawie tych wyników wnioskujemy, że podstawowa metoda R jest znacznie szybsza.
Możemy również użyć funkcji boxplot() do wizualizacji rozkładu czasu wymaganego do wykonania każdego wyrażenia:
library (microbenchmark) library (dplyr) #time how long it takes to calculate mean value of points by team results <- microbenchmark( aggregate(df$points, list(df$team), FUN=mean), df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean)) ) #create boxplot to visualize results boxplot(results, names=c(' Base R ', ' dplyr '))
Z wykresów pudełkowych widać, że obliczenie średniej wartości punktów na drużynę zajmuje średnio więcej czasu metodą dplyr.
Uwaga : w tym przykładzie użyliśmy funkcji microbenchmark() do porównania czasu wykonania dwóch różnych wyrażeń, ale w praktyce możesz porównać dowolną liczbę wyrażeń.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w języku R:
Jak wyczyścić środowisko w R
Jak wyczyścić wszystkie działki w RStudio
Jak załadować wiele pakietów w R