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 '))

Boxplot пакета мікротестів дає R

З коробкових графіків ми бачимо, що метод dplyr займає в середньому більше часу, щоб обчислити середнє значення балів на команду.

Примітка : у цьому прикладі ми використали функцію microbenchmark() , щоб порівняти час виконання двох різних виразів, але на практиці ви можете порівнювати скільки завгодно виразів.

Додаткові ресурси

У наступних посібниках пояснюється, як виконувати інші типові завдання в R:

Як очистити середовище в R
Як очистити всі ділянки в RStudio
Як завантажити декілька пакетів у R

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *