R言語で実行時間を計測する関数や実行例を紹介します。
この記事で扱うRスクリプトは以下からダウンロードできます。
実行時間を計測する際のテンプレートとして使ってもらって構いません。
実行時間の計測
実行時間を計測するときに用いる関数をいくつか紹介します。
実行時間を測る際に次の関数System.timeまたはSys.timeを用います。
以下、関数とその引数です。
expr | 計測したいexpression型のオブジェクト。 |
gcFirst. | logical型。ガーベージコレクションを最初に実行するかどうか。 |
実行例
System.timeは引数に実行時間を計測する関数を適用し計測できるのに対し、Sys.timeは現在の時刻を返します。
実行例
早速、実行時間の計測の例をみていきます。
次のフィボナッチ数の関数を例に実行時間の計測を行います。
1 2 3 4 5 6 7 | fibonacciNumber <- function(n) { if (n == 0 | n == 1) { return(n) } else { fibonacciNumber(n - 1) + fibonacciNumber(n - 2) } } |
system.timeの場合
関数system.timeで時間を計測するには、次のようにsystem.timeの引数に計測したい関数を渡します。
1 2 | #system.timeの場合 exTime <- system.time(fibonacciNumber(30)) |
exTimeを参照すると、ユーザー側の時間やシステムの時間、経過時間が保存されていることが分かります。
1 2 3 | > exTimeTable user.self sys.self elapsed time 2.5 0.03 2.62 |
これらの値を取得するには次のようにexTimeの各要素を名前で参照します。(インデックスでもできます)
1 2 3 4 5 | user_self <- exTime["user.self"] sys_self <- exTime["sys.self"] elapsed <- exTime["elapsed"] user_child <- exTime["user.child"] sys_self <- exTime["sys.child"] |
計測した時間をcsvファイルやテキストファイルに保存したい場合は、次のようにデータフレームに格納すると便利です。
1 2 3 4 5 | > exTimeTable <- data.frame(user.self = user_self, sys.self = sys_self, + elapsed = elapsed, row.names = "time") > exTimeTable user.self sys.self elapsed time 2.5 NA 2.62 |
Sys.timeの場合
次に関数sys.timeを使った計測方法を紹介します。
Sys.timeの場合、実行すると現在の時間が返されるため、次のように計測したい関数の前と後ろにSys.timeを置きます。
計測開始時間startと終了時間endの差を求めることで実行時間が得られます。
1 2 3 4 5 6 | #Sys.timeの場合 start <- Sys.time() fibonacciNumber(30) end <- Sys.time() diff <- end - start |
実行時間diffを参照すると2.53002秒であることが確認できます。
1 2 | > diff Time difference of 2.53002 secs |
また、関数difftimeを用いることで単位の変更を行うことができます。
1 2 3 4 5 6 | #単位を変える場合 diff_weeks <- difftime(end, start, units = "weeks") #週 diff_days <- difftime(end, start, units = "days") #日 diff_hours <- difftime(end, start, units = "hours") #時 diff_mins <- difftime(end, start, units = "mins") #分 diff_secs <- difftime(end, start, units = "sec") #秒 |
保存した計測時間は以下の通りです。
1 2 3 4 5 | > diffTable <- data.frame(week = diff_weeks, day = diff_days, hour = diff_hours, + min = diff_mins, sec = diff_secs, row.names = "execution time") > diffTable week day hour min sec execution time 4.183234e-06 weeks 2.928264e-05 days 0.0007027833 hours 0.042167 mins 2.53002 secs |
まとめ
Rで実行時間を計測する方法を紹介しました。
関数system.timeやSys.timeを用いることで測ることができます。
ここでは紹介していませんが、 実行時間を計測するためのパッケージもあるため、そっちを使ってみるのもお勧めです。