5

私は Emacs ESS の組み合わせが大好きです。マウスを使用せずに、コードの行、関数、領域、およびバッファーを評価のためにコマンド ラインに送信するのが大好きです。

Eval Functionただし、 Emacs のコマンドは、単に実行するよりもはるかに遅いことに気付きましたsource("fns.R")fns.Rは、評価したい関数を含むファイルです。

これはなぜですか?

4

3 に答える 3

8

essリストの人々はあなたにとってより良い答えを持っていると思います。しかし、目に見えない形で評価すると、処理ははるかに高速になります。これを.emacsファイルに入れてみてください:

(setq ess-eval-visibly-p nil)
于 2009-09-13T05:14:35.170 に答える
4

推測ですが、あなたが言うとき

  • source("fns.R")あなたはEmacs/ESSをまったく関与させておらず、計算時間はRがファイルを丸呑みして消化するのにかかる時間にすぎません-おそらく非常に短いですが、

  • Eval Function領域を Emacs インタープリターに渡します。Emacs インタープリターはそれを (おそらく行ごとに) R エンジンに送信しなければなりません。R エンジンはそれを少しずつ消化します。

これにより、2 番目のアプローチが遅くなります。

しかし、物事の壮大な計画では、誰が気にしますか? バッファ全体または大きな領域を送信することがよくありますが、それにはおそらく 1 秒の大部分がかかりますか? おっしゃる通り、(リッチ) エディターとその下にある言語がそのように相互作用する能力は、非常に強力なものだと今でも思います。

Emacs ハッカーと ESS チームに敬意を表します。

于 2009-09-12T01:13:42.900 に答える
1

バッファ全体を実行したい場合 - 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("myscript.r")' を実行するよりもこれらのメソッドを使用する利点は、明確なワークスペースで開始できることです (ただし、.Rprofile が変更されないことに注意する必要があります)。 'myscript.r' で明示的に 'source("~/.Rscript")' を呼び出さない限りロードされないため、スクリプトが自己完結型であることを確認できます (適切なライブラリを呼び出し、レキシカル スコープの関数はそうではありません)。 t 削除するのを忘れたグローバル空間で意図しない変数を参照するなど)。

于 2009-09-12T10:43:37.047 に答える