27

R 環境を開始するときに、長い R スクリプトを実行することがよくあります。Emacs / ESS で R スクリプトをロード / 実行し、別のバッファで他の作業を続けられるようにしたいと考えています。

Cg または Cc Cc を押すとプロセスが中断され、スクリプトを再起動する必要があります。

ESS/EmacsでRプロセスをバックグラウンド化する最良の方法は何ですか?

編集:回答とコメントをありがとうございますが、大きなスクリプトをロード/実行するとEmacsがフリーズし、バッファを変更できないという事実に対処するものはありません。

私の質問はもう少し一般的なものだと思います.Emacsはプロセスをバックグラウンドで処理して、作業を続けることができますか?

4

3 に答える 3

20

ESS は R を非同期プロセスとして実行します。何もバックグラウンドにする必要はありません。コードを何時間も実行しても、中断することなく ESS で作業できます。

あなたの問題は別のようです。スクリプトを実行すると、「視覚的に」実行されます。つまり、実行されたコードが端末に出力されます。これにより、Emacs がフリーズします。

nil に設定ess-eval-visiblyすると、大量のコードが即座に R に送信されます。

(setq ess-eval-visibly nil)

乾杯。

[アップデート]

最近のバージョンの ESS には新しい設定がありess-eval-visibplyます - 'nowait. コードを下位バッファーに配置し、サブプロセスに送信します。このようにして、サブプロセスが終了するのを待たずに、コードとすべての出力を後で見ることができます。

[/アップデート]

于 2011-01-22T09:28:42.427 に答える
3

M-x RR セッションを開始します (デフォルトのバッファー名は です*R*)。もう一度押すM-x Rと、2 番目の R セッションが開始されます (バッファー名で*R:2*)。

各セッションには独自の R プロセスがあるため、一方のセッションで長い R スクリプトを実行し、もう一方を個別に使用できます。

を押すとC-x C-bバッファ リストが表示され、R セッションを切り替えることができます。

または、あなたが置く場合

(global-set-key "\C-cr" 'ess-request-a-process)

.emacs初期化ファイルに追加すると、押すたびにC-c r、どの R セッション (バッファー) に切り替えたいかを尋ねられます。セッションが 1 つしかない場合は、そこに自動的に切り替わります。

于 2010-05-05T12:15:36.687 に答える
-3

私の個人的な経験では、ESS は非常に大きなスクリプトを処理するのが得意ではなく、Emacs の残りの部分が使用できなくなる場合があります。おそらく、ESS で開発を行ってから、完全なスクリプトを BATCH モードで実行する方がよいでしょう。

于 2010-05-06T05:26:05.767 に答える