2017-07-06 17 views
0

私はバックグラウンドで自動的にチャンクを複数回実行するRチャンクのタイミングの良い実行方法を探しています。 (PythonノートブックのMagic関数%%timeitはそれを正確に行います)R MarkDown/NotebookのタイミングRチャンク(Pythonの%% timeitに相当)

R関数やRコードの束を計る方法はいくつかありますが、その上にはfew SO questionsもあります。すべての方法はthisの記事にも記載されています。

しかし、それらのほとんどはrコードを複製せず、複製するオプションを持つもの(system.timeまたはmircobenchbarkなど)は、関数ではなくコードの塊には理想的です。

tictocは、単なる実行のための実行時間を与える以外は、私にとってはうまくいますが、実行時間は1000回、実行時間の平均化はできません。 (再び%% timeitの場合)

+1

あなたのコードを '{ここのコード}'で囲むだけで、 'system.time'や' microbenchmark'はそれをうまく利用できます。 'system.time({コードブロック})'のように、複数の行にまたがっても問題ありません。また、それを関数にラップして、より洗練されたテストインターフェイスのために関数を名前で呼び出すこともできます。 – lmo

+0

ありがとう@lmo。はい、それは私がそれについて行く方法と思ったものです。私はもっ​​とエレガントな方法があると思っていた。今、その確認をしてうれしい。 – PagMax

+0

パッケージを使ったほのかな方法がありますが、これが私のやり方です。非常に簡単に実装できます。あなたは 'profVis'パッケージを見るかもしれません。私が正しいことを覚えていれば、それは魅力的かもしれないグラフなどを作り出します。 – lmo

答えて

0

tictocとすると、タイミングをループに記録して結果を平均化することができます。

library(tictoc) 
tic.clearlog() 
for (x in 1:10) { 
    # passing x to tic() makes its value to become a label 
    # at time of the matching toc() call. 
    tic(x) 
    Sys.sleep(1) 
    # When log = TRUE, toc() pushes the measured timing to a list 
    # quiet = TRUE prevents from printing the timing 
    toc(log = TRUE, quiet = TRUE) 
} 

toc()の結果を印刷用の書式付きテキストとして取得します。

log.txt <- tic.log(format = TRUE) 

測定値を含むリストをそのままの形式で抽出します。

log.lst <- tic.log(format = FALSE) 

すでにデータが抽出されているため、tictocログをクリアしてください。

tic.clearlog() 

リスト要素をタイミングに変換します。 リストの各要素には、開始(tic)と終了(toc)のタイムスタンプがあります。

timings <- unlist(lapply(log.lst, function(x) x$toc - x$tic)) 

平均ループ時間を計算します。

mean(timings) 
# [1] 1.001 
関連する問題