質問
Emacs ESSの組み合わせが大好きです。マウスを使用せずに、評価のためにコマンドラインに行、関数、領域、およびコードバッファーを送信するのが大好きです。
ただし、Emacsの Eval Function
コマンドは、単に source(" fns.R")
を実行するよりもはるかに遅いことに気付きました。 fns.R は、評価したい関数を含むファイルです。
これはなぜですか?
解決
essリストの方がより良い答えを持っていると思います。しかし、目に見えない評価を行うと、処理ははるかに高速になります。これを.emacsファイルに入れてみてください:
(setq ess-eval-visibly-p nil)
他のヒント
推測しているだけですが、あなたが言うとき
-
source(" fns.R")
あなたはEmacs / ESSをまったく使用しておらず、計算時間はRがファイルを丸andみしてそれを消化するのにかかった時間です-おそらく非常に少ないですが、 -
Eval Function
は領域をEmacsインタープリターに渡し、Emacsインタープリターはそれを(おそらく行ごとに)Rエンジンに送信し、Rエンジンはそれを断片的に消化します。
それにより、2番目のアプローチが遅くなります。
まだ、物事の壮大な計画で、誰が気にしますか?バッファ全体または大きなリージョンを送信することがよくありますが、それはおそらく1秒の大部分を占めますか?私はまだ---あなたが言うように-(リッチな)エディターと基礎となる言語がそのように対話する能力は非常に強力なものだと思います。
EmacsハッカーとESSチームへの称賛。
バッファ全体を実行する場合-Unix / Linuxを使用している場合は、シェバンでスクリプトを開始することもできます。
#!/usr/bin/Rscript
ファイルを実行可能にします
chmod 744 myscript.r
(Googleがrスクリプトを.Rで終わらせるのを好むが、まあ...)
./myscript.r
そして、引数付きで、
./myscript.r arg1 arg2
(MatlabシステムコールからR関数を呼び出すために実際に使用した)およびRファイルで使用する可能性がある
userargs = tail(commandArgs(),2)
arg1およびarg2を取得します。シバンなしでもできます:
R --no-save < myscript.r arg1 arg2
など。 Windowsでは、
R CMD BATCH myscript.r
またはその効果... ESSを介してコマンドを実行すると少し遅延が発生することに気づきました(ESSは非常に気に入っていますが非常に)ので、バッファ全体を実行したい場合は、 Rスクリプト(通常はRバッファーが常駐する場所)の下のウィンドウでシェルを起動し、上記のトリックを使用することがあります。
使用することもできます
echo 'source("myscript.r")' | R --no-save
同様に-RまたはRバッファーで直接 'source(&quot; myscript.r&quot;)'を実行するよりもこれらのメソッドを使用する利点は、明確なワークスペースから始めることです(ただし、 .Rprofileは、「myscript.r」で明示的に「source(&quot;〜/ .Rscript&quot;)」を呼び出さない限りロードされないため、スクリプトが自己完結していることを確認できます(適切なライブラリを呼び出し、語彙的に-scoped関数は、削除を忘れたグローバルスペース内の意図しない変数などを参照していません。