【R】Rでコマンド実行時間の計測(4種類)

2022-06-07

timeと書かれた積み木の横に時計が置かれている画像。時間を計測するイメージ画像。

Rでforを使った繰り返し処理が遅かったので実行時間を計測した際、計測方法が複数あったのでそれぞれの特徴をまとめています。

計測方法

system.time()とproc.time()はbaseに含まれているコマンドのため、追加ライブラリは必要ありません。

tictocとmicrobenchmarkはそれぞれライブラリにインストールと読み込みが必要になります。

system.time()

ドキュメント(https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/system.time

使い方

system.time(実行内容)
#複数のコマンドは計測できない

出力

   ユーザ   システム       経過  
      0.55       0.00       0.55

単位は「秒」で、1/100秒の精度で出力されます。出力のうち、「ユーザ」が指定したコマンドの実行時間、「システム」はシステムコール、「経過」が全体の実行時間です(合計が一致するとは限りませんが…)。

proc.time()

ドキュメント(https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/proc.time

使い方

変数 <- proc.time()
実行内容
proc.time()-変数
#実行内容が複数のコマンドでも計測可

出力

   ユーザ   システム       経過  
      0.55       0.00       0.55

system.timeのドキュメントにproc.timeを呼び出して実行とあるため、出力はsystem.time()と同じです。

複数のコマンドが実行される全体の時間を計測したい場合はproc.time()、単一コマンドの実行時間を計測したい場合はsystem.time()で使い分けかと思います。

tictoc

CRAN(https://cran.r-project.org/web/packages/tictoc/index.html

使い方

library(tictoc)
tic()
実行内容
toc()
#実行内容が複数のコマンドでも計測可

出力

0.57 sec elapsed

全体の実行時間だけが秒単位で出力されます。精度はこちらも1/100秒です。ライブラリのインストールは必要ですが、シンプルで簡単に使えます。

microbenchmark

CRAN(https://cran.r-project.org/web/packages/microbenchmark/index.html

使い方

library(microbenchmark)
microbenchmark(
  変数 = {
    実行内容
  }
)
#実行内容が複数のコマンドでも計測可

出力

Unit: milliseconds
 expr     min       lq    mean  median      uq     max neval
 変数 51.9249 53.83435 57.4397 55.7368 59.6355 82.2636   100

ベンチマークと付いているだけあって、繰り返し実行して(デフォルトは100回)実行時間を計測します。単位は実行時間によって変わるため、Unitを確認してください。

結果は変数に代入されるため、そのままグラフも作れます。

個人的な使いわけ

  • プログラム全体の実行時間を知りたい → tictoc
  • 特定の関数やコマンドの実行時間を知りたい → system.time()、microbenchmark
  • ブロック別の実行時間を知りたい → proc.time()、microbenchmark
  • 1/100ミリ秒未満の実行時間を知りたい → microbenchmark

開発時にしか使わないので、tictocとmicrobenchmarkで賄えると思います。