39

...スクリプトファイルの最初の行で、(私のシステムでは)Rscriptが(私のシステムでは)で呼び出され、#!/usr/bin/env Rscript少しだけ呼び出されるという事実に加えて。#!/usr/local/bin/r実行速度に一定の違いがあることがわかりました(少し小さいほど少し遅いようです)。

2つのダミースクリプトを作成し、それぞれ1000回実行して、平均実行時間を比較しました。

Rscriptファイルは次のとおりです。

#!/usr/bin/env Rscript

btime <- proc.time()
x <- rnorm(100)
print(x)
print(plot(x))
etime <- proc.time()
tm <- etime - btime
sink(file = "rscript.r.out", append = TRUE)
cat(paste(tm[1:3], collapse = ";"), "\n")
sink()
print(tm)

そしてここに小さなファイルがあります:

#!/usr/local/bin/r

btime <- proc.time()
x <- rnorm(100)
print(x)
print(plot(x))
etime <- proc.time()
tm <- etime - btime
sink(file = "little.r.out", append = TRUE)
cat(paste(tm[1:3], collapse = ";"), "\n")
sink()
print(tm)

ご覧のとおり、これらはほとんど同じです(最初の行とシンクファイルの引数が異なります)。出力はsinkテキストファイルに編集されるため、Rに。を使用してインポートされますread.table。各スクリプトを1000回実行するbashスクリプトを作成し、平均を計算しました。

これがbashスクリプトです:

for i in `seq 1000`
do
./$1
echo "####################"
echo "Iteration #$i"
echo "####################"
done

そして結果は次のとおりです。

# littler script
> mean(lit)
    user   system  elapsed 
0.489327 0.035458 0.588647 
> sapply(lit, median)
   L1    L2    L3 
0.490 0.036 0.609 
# Rscript
> mean(rsc)
    user   system  elapsed 
0.219334 0.008042 0.274017 
> sapply(rsc, median)
   R1    R2    R3 
0.220 0.007 0.258 

簡単に言うと、(明らかな)実行時間の違いのほかに、他に何か違いはありますか?より重要な質問は次のとおりです。Rscriptよりも少しだけ(またはその逆に)優先する必要がある/すべきではないのはなぜですか?

4

1 に答える 1

24

カップルの簡単なコメント:

  1. パス/usr/local/bin/rは任意で/usr/bin/env rあり、いくつかの例で使用するのと同じように使用できます。r私が思い出したように、それはあなたが与えることができる他の引数を制限します。env

  2. 私はあなたのベンチマークを理解していません、そしてなぜあなたはそれをそのようにするのか分かりません。ソースにタイミング比較があります。とを参照tests/timing.shしてくださいtests/timing2.sh。たぶん、あなたはスタートアップとグラフ作成の間、あるいはあなたが何を求めているのかの間でテストを分割したいと思うでしょう。

  3. 私たちがそれらのテストを実行するときはいつでも、少しだけ勝ちました。(私が今それらを再実行したとき、それはまだ勝ちました。)ソースを見ると、Rscript.exe最終的にを呼び出す前に環境とコマンド文字列を設定することによって動作が異なるため、これは私たちにとって理にかなっていますexecv(cmd, av)。少しでも早く始めることができます。

  4. 主な価格は携帯性です。少しずつ構築された方法では、Windowsには到達しません。または、少なくとも簡単ではありません。OTOH RInsideが移植されたので、誰かが本当にしたいのなら...

  5. 2007年4月にR2.5.0に付属していたRscriptに対して、Littlerは2006年9月に最初に登場しました。

  6. Rscriptは、Rが存在するすべての場所にあります。それは大きな利点です。

  7. 私の見解では、コマンドラインオプションの方が少し賢明です。

  8. どちらもCRANパッケージgetoptおよびoptparseで機能し、オプションの解析を行います。

ですから、それは個人的な好みです。私は少しずつ共同執筆し、それを行うことで多くのことを学びましたが(たとえば、RInsideの場合)、それでも便利だと感じています。そのため、毎日何十回も使用しています。それはCRANberriesを駆動します。cran2debを駆動します。あなたのマイレージは、ちょっと言うように、変わるかもしれません。

免責事項:littlerは私のプロジェクトの1つです。

追記:私はテストを次のように書いたでしょう

私はこれを次のように書いたでしょう

  fun <- function { X <- rnorm(100); print(x); print(plot(x)) }
  replicate(N, system.time( fun )["elapsed"])

あるいは

  mean( replicate(N, system.time(fun)["elapsed"]), trim=0.05)

外れ値を取り除くために。さらに、基本的にI / O(印刷とプロット)を測定するだけで、どちらもRライブラリから取得されるため、ほとんど違いはないと思います。

于 2010-07-08T15:52:41.183 に答える