(R)実行時間の計測と一時的な実行中止
proc.time関数を使います。
> proc.time() ユーザ システム 経過 0.65 0.29 14.26 > proc.time() ユーザ システム 経過 0.67 0.29 15.67 > proc.time() ユーザ システム 経過 0.70 0.29 17.20 > proc.time() ユーザ システム 経過 0.70 0.31 18.68 > proc.time() ユーザ システム 経過 0.70 0.31 20.25
何回か実行すると上のように出力されました。
ユーザ、システムはCPU関係のものらしいですが、経過はRを起動してから経過した時間を表します。なので次のように調べたい処理を挟んで差をとれば処理時間を計測できます。
> start <- proc.time() > for(i in 1:10000000){} #計測される処理 > end <- proc.time() > (end-start)[3] elapsed 1.13
なお、関数の場合はsystem.time関数を使います。system.timeの中身を見ればわかりますが、proc.timeを使っておりやっていることはほとんど上と同じです。
f <- function(x){ for(i in 1:x){} } > system.time( f(10000000) ) ユーザ システム 経過 0.91 0.02 0.92
proc.timeを使ってプログラムを一時的に実行中止する関数を作れます。JavaでいうところのThread#sleepですね。
引数に待機時間(秒)を指定します。
sleep <- function(sec){ start <- proc.time() end <- proc.time() while((end-start)[3] < sec){ end <- proc.time() } } > system.time( sleep(10) ) ユーザ システム 経過 9.89 0.11 10.00
※追記
コメントで教えていただいたSys.sleepですが、上のやつと比べると明らかにSys.sleepの方が性能が良いのでこちらを使いましょう。