[[ESS]] --- Emacs Speaks Statistics * 使用方法 [#t8ac15c1] ESS には (i) R を Emacs から使う iESS モード,(ii) R スクリプト作成支援環境を提供する ESS[R] モード,(iii) R ヘルプから Example を実行したりできる help[R] モードがあります. ** iESS [#a0c18444] :R 起動 (''M-x R'')| 複数の R を起動することが可能. :R 終了 (''C-c C-q'')| 関連するバッファも全て消してくれる :最初からESSモードでemacsを起動する方法| コマンドラインから // -- SIZE(10){2003-07-23 (水) 17:16:53} $ emacs -f R & //#comment :コマンド履歴 (''M-p'', ''M-n'')| :コマンド履歴の検索 (''M-r'', ''M-s'')| :ヘルプ参照 (''C-c C-v'') | :オブジェクト一覧 (''C-c C-x'')| ** ESS モード (R モード) [#j58966ae] |Emacsの基本編集機能|一文字右に移動|(''C-f'')| |~|一文字左に移動|(''C-b'')| |~|一行上に移動|(''C-p'')| |~|一行下に移動|(''C-n'')| |~|行頭へジャンプ|(''C-a'') | |~|行末へジャンプ| (''C-e'') | |~|バッファの先頭にジャンプ|(''M-<'')| |~|バッファの末尾にジャンプ|(''M->'')| |~|指定行にジャンプ|(''M-x goto-line'')| |~|カーソル位置を削除|(''C-d'')| |~|カーソルの前を削除|(''C-h'')| |~|カーソル位置から行末までカット|(''C-k'')| |Emacsのウィンドウ・バッファ関連|ウィンドウのバッファを切替える|(''C-b'')| |~|ウィンドウを消去する|(''C-x 0'')| |~|バッファを消去する|(''C-k'')| |~|ウィンドウを移動|(''C-x o'')| |~|ウィンドウを上下に分割|(''C-x 2'')| |~|ウィンドウを左右に分割|(''C-x 3'')| |ESS Eval| バッファ全体を実行 | (''C-c C-b'') | |~|選択されている範囲(リージョン)を実行| (''C-c C-r'')| |~|関数を実行| (''C-M-x'')| |~|関数・パラグラフを実行し次行へ移動|(''C-c C-c'')| |~|ミニバッファに式を入れて実行|(''C-c C-t'')| |~|現在行のみ実行| (''C-c C-j'') | |~|現在行を実行し次行へ移動| (''C-c C-n'') | |~|パラグラフを実行し次行へ移動| (''C-c C-p'') | |Eval and Go|バッファ全体を実行して*R*バッファへジャンプ | (''C-c M-b'') | |~|選択されている範囲(リージョン)を実行して*R*バッファへジャンプ | (''C-c M-r'')| |~|関数を実行して*R*バッファへジャンプ | (''C-c M-f'')| |~|現在行のみを実行して*R*バッファへジャンプ | (''C-c M-j'') | |Motion|新しいオブジェクトを編集| (''C-c C-d'') | |~|ESSバッファの最終行にジャンプ| (''C-c C-z'') | |~|ESSバッファへ切り替え|(''C-c C-y'')| |~|関数の先頭にジャンプ|(''C-M-a'')| |~|関数の末尾にジャンプ|(''C-M-e'')| |ESS List||| |ESS Edit|ファイル名補完|(''M-TAB'')| |~|オブジェクト名補完|(''C-c TAB'')| |その他|ファイルの読み込み|(''C-c C-l'')| |~|Rの起動|''R''| |~|プロセスの切り替え|(''C-c C-s'')| |~| <- の挿入(前後の空白つき)|''_'' (アンダーバー)| 加筆をお願いします // :バッファから R へ直接コマンドを送る| // // -バッファ全体 (''C-c C-b'') // - 選択されている範囲(リージョン) (''C-c C-r'') // - 関数 (''C-c C-f'') // - 一行 (''C-c C-j'') *** ソースの整形 [#sab1766b] 自動インデント整形機能のためコード入力時に自動的に整形されるが、ごにょごにょ編集して再整形の必要が生じたときには、下記のコマンドを使う。 |選択範囲を整形|(''C-M-\'')| |式全体の整形|(''C-M-q'')| |1行のみの整形|''TAB''| 式全体を整形したい場合は、カーソルをその式のコマンド名部分に持ってくる必要がある(ちょっと考えれば当たり前のことなんだけど)。1行のみの場合は、その行のどこにカーソルがあってTABキーを押下すれば、(その場にTABが挿入されるのではなく)正しく整形してくれる。 コメント行の整形では、「#」と「##」と「###」の動作が異なるので要注意。コメント文をインデントの位置に持ってきたい場合には、 ## メイン処理 というように「##」を使う。なお、「###」では行頭になる。 「#」も「###」も「##」と同様の動作にしたいときには、Emacs上で次の式を評価する(.emacs.elなどに書いておいても良い)。 (setq ess-fancy-comments nil) 次の式を評価すれば元の動作に戻る。 (setq ess-fancy-comments t) ** ESS-help [#w1ea00fb] help(foo) で開いたヘルプのバッファにおいて,Example の各行に対して ''l'' で,コンソールバッファにコピーかつ評価される. ---- //------------------------------------------------------------ * ESS 利用の流れ [#g8f34f18] ** 例1:関数を書いてロードする [#h9411c28] //R 起動 // M-x R // //オブジェクト名を決める ~ //バッファが用意される // C-c C-d: オブジェクト名 オブジェクト(関数など)記述 my.func <- function() { print( "hello" ) } //Rを自動的に起動させて、オブジェクトを R 環境にロードする ~ //ここでは今書いた ''my.func()'' 関数をロード ~ ''my.func()'' の定義文のどこか、または、末尾の ''}'' の後ろで, C-c M-f 初回はStarting Data Directroyの場所を尋ねられるが、そのままEnterを押下すると、Rが 自動的に起動し、''my.func()'' の定義文は実行され、Rのスクリプトを編集してい るバッファが2つに分裂し、R実行環境である*R*バッファが現れ、その*R*バッファに カーソルが移動する、という一連の動作が行われる。 //R 実行環境に移動する // C-c C-y ** 例2:編集中のRコードをとにかく実行する [#hadc50e0] とにかく編集中のRコードを実行するには、 C-c C-c とする。カーソルが置かれている文脈を自動判別して、パラグラフまたは関数を実行してくれる。パラグラフは、空行で区切られたRコードのかたまりである。もし、Rスクリプトに空行が1行もない場合は、全体が実行されてしまうので、適当に空行を入れる癖をつけた方がよい(と思う)。 ** 例3:要らない部分をコメント化 [#i574e9e9] Rスクリプトの最大の利点の1つが、再実行・再現が簡単な点である。Rスクリプト全体を実行するときに不要になる 部分は、コメント化しておきたい。 コメント化したい部分を選択して M-x comment-region で選択部分がコメント化される。次にバッファ全体を実行するには下記のようにする。 C-c C-b コメント化した部分を元に戻すには、有効化したいRコードを選択して M-x uncomment-region とする。 ---- * 便利な関数 [#d5fb2bc6] ** スクリプト作成中にヘルプを見る [#a436e3ce] ESS[R] モードで関数やスクリプトを書いているときに「あの関数のヘルプを見たい」場合は M-x ess-help 関数名 でヘルプバッファが開きます.関数名の補完もしてくれます. ** Emacs を利用しているものとは異なる計算機でスクリプトを実行する [#sa02ec82] ** Rの起動オプションを渡したい場合 [#qb0ff13a] 例えば、--vanillaをつけてRを起動したい場合は、設定ファイルに (setq inferior-R-args "--vanilla") と書く。