まず、emacsで動作する基本的なテキストを学ぶ必要があります。emacsは非常に洗練されているため、単にテキストとコピーを選択する方法を見つけるのは難しいかもしれません。ですから、それを効率的に行う方法を見つけるために、少し時間をかけてください。マニュアルを読むと役立つかもしれません。Mac OS XではAquamacsを使用し、ネイティブショートカットをサポートしています。
ESSでの作業は、Rでの作業と違いはありません。コードを編成するための同じルールを適用する必要があります。私の場合、すべてのプロジェクトには、ホームディレクトリにあるRという親ディレクトリにある独自のディレクトリがあります(Windowsの場合、すべてのソースが存在するディレクトリをemacsホームディレクトリに指定することをお勧めします)。したがって、プロジェクトでの作業にESSを使用するときはM-x R
、常にプロジェクトの開始ディレクトリを選択します。
Rプロセスを開始した後、私は通常、emacsを2つのウィンドウに分割します(emacs用語)。次に、左側にソースコードがあり、右側のRプロセスに送信します。関連するショートカット(これらはemacsショートカットです)はC-x 3
、ウィンドウを垂直方向に分割するためC-x 1
、現在のバッファーを唯一のウィンドウにするC-x 2
ため、およびウィンドウを水平方向に分割するためのものです。
コードをRに送信するときは、関数とRステートメントを区別しています。これを行うには、すべての関数を、通常と呼ばれる1つのファイルに保存します10code.R
。次に、ESSファイルのロードオプション(ショートカットC-c C-l
)を使用して、このファイルを単にロードできます。このアプローチの利点は、すべての関数を調達し、Rバッファーに何も生成しないことです。コードにエラーがある場合、ESSはミニバッファーにメッセージを表示し、C-c
` を押してそれを調査できます。
もう1つのコードはRステートメントであり、私はそれを自明にしておきます。データのロード、データのクリーン、統計モデルの適合、結果の検査、最終結果の生成を行います。これらのステートメントのソースコードは、プロジェクトの現在のステータスです。意図は、プロジェクトが完了した後、このコードでファイルを調達し、プロジェクトを再現することです(私は履歴の追跡にもgitを使用しています)。このファイルを操作するとき、私は通常、1つのRステートメントのみを使用しC-c C-c
ます。これは、eval関数、段落、ステートメントコマンドを介してRプロセスに送信し、ショートカットはです。このコマンドは、段落、つまり改行で区切られたテキストをRプロセスに送信します。Rステートメントをタスクにグループ化し、タスク全体をRプロセスに送信できるため、これは便利です。また、テキストを選択する必要がないため、非常に便利です。ショートカットC-c C-c
カーソルをRウィンドウに移動するという利点があり、送信されたRステートメントの結果をすぐに検査できます。
したがって、私の基本的なワークフローは、ウィンドウとバッファの間を頻繁に移動することです。これを容易にするために、.emacsファイルで次のショートカットを使用します。
(define-key global-map [f1] 'Control-X-prefix)
(define-key global-map [f3] 'find-file)
(define-key global-map [f2] 'save-buffer)
(define-key global-map [f8] 'kill-buffer)
(define-key global-map [f5] 'switch-to-buffer)
(define-key global-map [f6] 'other-window)
(define-key global-map [f9] 'ess-load-file)
私はめったに使用しませんf1
が、他のすべては非常に頻繁に使用します。私が使用するその他の特定のESS設定は次のとおりです。
(setq comint-input-ring-size 1000)
(setq ess-indent-level 4)
(setq ess-arg-function-offset 4)
(setq ess-else-offset 4)
これはESSにタブを4文字幅(デフォルトは2)にするように指示します。これは私の個人的な好みであり、ESSが履歴として保存する発行済みコマンドの数を拡張します。
Rプロセスを直接操作する場合、次のショートカットが非常に役立つことがわかりました。
(add-hook 'inferior-ess-mode-hook
'(lambda nil
(define-key inferior-ess-mode-map [\C-up] 'comint-previous-matching-input-from-input)
(define-key inferior-ess-mode-map [\C-down] 'comint-next-matching-input-from-input)
(define-key inferior-ess-mode-map [\C-x \t] 'comint-dynamic-complete-filename)
)
)
これは、Rステートメントの履歴からRステートメントを呼び戻しますが、すでに行にあるものと一致させようとします。たとえばpl
、Rプロセスを入力して押すと\C-up
(それはコントロールと上矢印)、で始まるすべてのステートメントが循環するpl
ため、たとえばすべてのplot(...
コマンドが呼び出されます。
私がESSで使用する最後の設定は次のとおりです。
(setq ess-ask-about-transfile t)
この方法では、ESSは常に、Rプロセスを使用してテキストをバッファーのどこに保存するかを尋ねます。私は通常これらのファイルに日付に従って番号を付けるので、自分が何をしていたかを正確に追跡する別の方法が常にあります。このオプションの唯一の注意点は、何らかの理由により、ESSはRをロードした後、Rバッファーを読み取り専用に設定することですC-x C-q
。バッファーを書き込み可能にするためのショートカットはです。
したがって、これらはESSでの作業に使用する私の設定であり、私はそれらに満足しており、すでに数年間何かを追加する必要を感じていませんでした。初めてのユーザーにESSを紹介するときは、通常、この概要を説明します。
最後に、Emacs、特にESSで作業するときに最も使用されるショートカットである最後のショートカットを使用しC-g
ます。これにより、ミニバッファーでコマンドが終了します。私はEmacsとESSを使用して何年にもわたって仕事をしてきましたが、私は不要なEmacsコマンドを呼び出すことができましたがC-g
、これらの状況では非常に役立ちます。