A: як використовувати пакет microbenchmark для вимірювання часу виконання
Ви можете використовувати пакет microbenchmark у R, щоб порівняти час виконання різних виразів.
Для цього можна використати такий синтаксис:
library (microbenchmark) #compare execution time of two different expressions microbenchmark( expression1, expression2) )
У наступному прикладі показано, як використовувати цей синтаксис на практиці.
Приклад: використання microbenchmark() у R
Припустимо, що ми маємо наступний кадр даних у R, який містить інформацію про очки, набрані гравцями різних баскетбольних команд:
#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
Тепер припустімо, що ми хочемо обчислити середню кількість очок, набраних гравцями кожної команди, використовуючи два різні методи:
- Спосіб 1 : Використовуйте Aggregate() з Base R
- Спосіб 2 : Використовуйте group_by() і summarise_at() з dplyr
Ми можемо використовувати функцію microbenchmark() , щоб виміряти час, потрібний для виконання кожного з цих виразів:
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
Функція microbenchmark() запускає кожен вираз 100 разів і вимірює такі показники:
- min : Мінімальний час, необхідний для виконання
- lq : нижній квартиль (25 процентиль) часу, необхідного для виконання
- Середнє : середній час, необхідний для виконання
- median : середній час виконання
- uq : верхній квартиль (75-й процентиль) часу, необхідного для виконання
- max : максимальний час, необхідний для виконання
- neval : кількість разів, коли кожен вираз було обчислено
Як правило, ми розглядаємо лише середній або медіанний час, необхідний для виконання кожного виразу.
З результату ми бачимо:
- Для обчислення середнього командного балу за допомогою R-методу знадобилося в середньому 1852 мілісекунди .
- Щоб обчислити середні бали на команду за допомогою методу dplyr, знадобилося в середньому 9,946 мілісекунди .
На основі цих результатів ми робимо висновок, що базовий метод R значно швидший.
Ми також можемо використовувати функцію boxplot() , щоб візуалізувати розподіл часу, необхідного для виконання кожного виразу:
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 '))
З коробкових графіків ми бачимо, що метод dplyr займає в середньому більше часу, щоб обчислити середнє значення балів на команду.
Примітка : у цьому прикладі ми використали функцію microbenchmark() , щоб порівняти час виконання двох різних виразів, але на практиці ви можете порівнювати скільки завгодно виразів.
Додаткові ресурси
У наступних посібниках пояснюється, як виконувати інші типові завдання в R:
Як очистити середовище в R
Як очистити всі ділянки в RStudio
Як завантажити декілька пакетів у R