A: cara menggunakan paket microbenchmark untuk mengukur waktu eksekusi


Anda dapat menggunakan paket microbenchmark di R untuk membandingkan waktu eksekusi ekspresi yang berbeda.

Anda dapat menggunakan sintaks berikut untuk melakukan ini:

 library (microbenchmark)

#compare execution time of two different expressions
microbenchmark(
  expression1,
  expression2)
)

Contoh berikut menunjukkan cara menggunakan sintaksis ini dalam praktiknya.

Contoh: Menggunakan microbenchmark() di R

Misalkan kita memiliki kerangka data berikut di R yang berisi informasi tentang poin yang dicetak oleh pemain di berbagai tim bola basket:

 #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

Sekarang misalkan kita ingin menghitung rata-rata poin yang dicetak oleh pemain di setiap tim menggunakan dua metode berbeda:

  • Metode 1 : Gunakan Agregat() dari Basis R
  • Metode 2 : Gunakan group_by() dan summarise_at() dari dplyr

Kita dapat menggunakan fungsi microbenchmark() untuk mengukur waktu yang diperlukan untuk mengeksekusi setiap ekspresi berikut:

 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

Fungsi microbenchmark() menjalankan setiap ekspresi 100 kali dan mengukur metrik berikut:

  • min : Waktu minimum yang diperlukan untuk eksekusi
  • lq : kuartil terbawah (persentil ke-25) waktu yang diperlukan untuk menyelesaikannya
  • Mean : Rata-rata waktu yang dibutuhkan untuk eksekusi
  • median : Median waktu eksekusi
  • uq : kuartil atas (persentil ke-75) dari waktu yang dibutuhkan untuk mengeksekusi
  • max : Waktu maksimum yang diperlukan untuk eksekusi
  • neval : Berapa kali setiap ekspresi dievaluasi

Biasanya, kami hanya melihat waktu rata-rata atau median yang diperlukan untuk mengeksekusi setiap ekspresi.

Dari hasilnya kita dapat melihat:

  • Dibutuhkan waktu rata-rata 1,852 milidetik untuk menghitung rata-rata poin tim menggunakan metode berbasis R.
  • Dibutuhkan waktu rata-rata 9,946 milidetik untuk menghitung rata-rata poin per tim menggunakan metode dplyr.

Berdasarkan hasil ini, kami menyimpulkan bahwa metode basis R jauh lebih cepat.

Kita juga dapat menggunakan fungsi boxplot() untuk memvisualisasikan distribusi waktu yang diperlukan untuk mengeksekusi setiap ekspresi:

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

Plot kotak paket microbenchmark menghasilkan R

Dari box plot terlihat bahwa metode dplyr rata-rata membutuhkan waktu yang lebih lama untuk menghitung nilai rata-rata poin per tim.

Catatan : Dalam contoh ini, kami menggunakan fungsi microbenchmark() untuk membandingkan waktu eksekusi dua ekspresi berbeda, namun Anda dapat membandingkan ekspresi sebanyak yang Anda inginkan dalam praktiknya.

Sumber daya tambahan

Tutorial berikut menjelaskan cara melakukan tugas umum lainnya di R:

Cara membersihkan lingkungan di R
Cara menghapus semua plot di RStudio
Cara memuat banyak paket di R

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *