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

Rコードのベンチマーク

bob3bob3
October 20, 2022

 Rコードのベンチマーク

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

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 )