【R】Rでコマンド実行時間の計測(4種類)
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で賄えると思います。
ディスカッション
コメント一覧
まだ、コメントがありません