Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rコードのベンチマーク

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for bob3bob3 bob3bob3
October 20, 2022

 Rコードのベンチマーク

Rコードのベンチマーク手法

Avatar for bob3bob3

bob3bob3

October 20, 2022
Tweet

More Decks by bob3bob3

Other Decks in Technology

Transcript

  1. 準備:各処理の関数化 # dplyrでの処理を関数化 f_dplyr <- function(){ dat |> group_by(month, carrier,

    origin, dest) |> summarise( 件数 = n(), 平均 = mean(air_time, na.rm = TRUE), 中央値 = median(air_time, na.rm = TRUE), .groups = "drop" ) } # dtplyrでの処理を関数化 f_dtplyr <- function(){ dat |> lazy_dt() |> group_by(month, carrier, origin, dest) |> summarise( 件数 = n(), 平均 = mean(air_time, na.rm = TRUE), 中央値 = median(air_time, na.rm = TRUE), .groups = "drop" ) |> as_tibble() }
  2. 準備:各処理の関数化 # data.tableでの処理を関数化 f_data.table <- function(){ dt <- dat |>

    data.table( key=c("month", "carrier", "origin", "dest") ) dt[ , .( 件数 = .N, 平均 = air_time |> mean(na.rm = TRUE), 中央値 = air_time |> median(na.rm = TRUE) ), by = list(month, carrier, origin, dest) ] |> as_tibble() }
  3. microbenchmarkパッケージ (1/3) • 複数の処理を一度に測定できる。 
 • 同じ処理を複数回試行して測定できる。 
 • 結果を可視化できる。

    
 library(microbenchmark) res_micro <- microbenchmark( "dplyr"= f_dplyr(), "dtplyr" = f_dtplyr(), "data.table" = f_data.table(), times = 30 )