目次



Emacs から R を使う

ESS (Emacs Speaks Statistics) は Emacs や XEmacs から R などの統計解析アプリケーションを便利に使ってしまおう,という Lisp プログラムです.(スクリーンショット

ESSがどれだけれ能率向上をもたらしてくれるものか、などは「The R Book」p.55--56に叙述されています。

News

最新版:17.11 update! (2017年11月13日)

変更点(16.10→17.11)

変更点(16.04→16.10)

変更点(15.09→16.04)

変更点(15.03→15.09)

変更点(14.09→15.03)

変更点(13.09-1→14.09)

変更点(13.09→13.09-1)

変更点(13.05→13.09)

変更点(12.09-2→13.05)

変更点(12.09→12.09-2)

変更点(12.09→12.09-1)

変更点(12.04-3→12.09)

変更点(12.04-1→12.04-3)

変更点(12.04→12.04-1)

変更点(12.03→12.04)

変更点(5.14→12.03)

その他、多数の変更点、新規実装あり。

変更点(5.13→5.14)

変更点(5.12→5.13)

変更点(5.11→5.12)

変更点(5.10→5.11)

変更点(5.9→5.10)

変更点(5.8→5.9)

変更点(5.7.1→5.8)

変更点(5.7→5.7.1)

変更点(5.6→5.7)

変更点(5.4→5.6)

変更点(5.3.11→5.4)

変更点(5.3.10→5.3.11)

変更点(5.3.9→5.3.10)

変更点(5.3.8→5.3.9)

変更点(5.3.7→5.3.8)

変更点(5.3.6→5.3.7)

変更点(5.3.5→5.3.6)

変更点(5.3.4→5.3.5)

変更点(5.3.3→5.3.4)

変更点(5.3.2→5.3.3)

変更点(5.3.1→5.3.2)

変更点(5.3.0→5.3.1)

変更点(5.2.12→5.3.0)

変更点(5.2.11→5.2.12)

変更点(5.2.10→5.2.11)

変更点(5.2.9→5.2.10)

変更点(5.2.8→5.2.9)

変更点(5.2.7→5.2.8)

変更点(5.2.6→5.2.7)

変更点(5.2.5→5.2.6)

変更点(5.2.4→5.2.5)

変更点(5.2.3→5.2.4)

変更点(5.2.2→5.2.3)

変更点(5.2.1→5.2.2)

変更点 (5.2.0→5.2.1)


Windowsへインストール

簡単インストール

Emacs for Windows Modifiedの22.3-modified-5(2009年7月20日リリース)から、ESSが含まれるようになりました。含まれるESSのバージョンは5.4です。ESSのインストールに躓いているひとは試してみるとよいかも。

Q&A (初級者コース) より転載

西川? (2004-06-25 (金) 14:43:13)

日頃Windowsしか触っておらず、UNIXとは縁がない私のような人は、ESSのインストールからつまずくと思うので、以下のページを見てやってみてください。 http://www1.u-netsurf.ne.jp/~ysk-net/WithEmacs/page2_1_2.html とりあえず、meadowはインストールできます。XEmacsの海外サイトからダウンロードしようとしたがftpでつまづいて、3日もかけてしまいました。時間の無駄なので、同じことは皆さんしないでくださいね。

Linuxへのインストール

RPM系Linuxへのインストール

$ wget http://ess.r-project.org/downloads/ess/ess-5.3.0.tar.gz
$ rpm -ta ess-5.3.0.tar.gz
[中略]
書き込み完了: /home/ほげ/rpm/SRPMS/emacs-ess-5.3.0-1.tgm.src.rpm 
書き込み完了: /home/ほげ/rpm/RPMS/noarch/emacs-ess-5.3.0-1.tgm.noarch.rpm
[後略] 

とするとemacs-ess-5.3.0-1.tgm.noarch.rpmができあがります。このrpmをインストールすればOK。新規インストールの場合は、

# rpm -ivh /home/ほげ/rpm/RPMS/noarch/emacs-ess-5.3.0-1.tgm.noarch.rpm

バージョンアップの場合は

# rpm -Fvh /home/ほげ/rpm/RPMS/noarch/emacs-ess-5.3.0-1.tgm.noarch.rpm

「ほげ」は自分の環境に読み替えてください。

トラブルシューティング

バージョン5.2.9の依存関係は、rpm -qpRで調べても、emacsぐらいしかありませんが、BIULDする際にはtexi2dviを使っていました。上記はVineLinux3.1上で検証しましたが、FedraやTurboでは、ちょっと違うかも知れません。情報をお待ちしています。ビルドの際にトラブルに遭遇した方は、是非書き込んでください。ノウハウを蓄積しましょう。

Ubuntuへのインストール

Ubuntuではessがパッケージ化されているので、

sudo apt-get install ess

これでインストールOK

MacOSXへインストール

Carbon Emacs

Carbon Emacs パッケージには最初からessが同梱されています。別途インストールする必要はありません。

MacPorts

sudo port install ess

これでインストールOK


スクリーンショット

ess-emacs-toolbar.jpg

拡張子rとR-mode(ess-mode)を関係づけておいて、拡張子がrのファイルを読み込むとR-modeが起動して、R-modeのツールバーが出現します。「R」のアイコンを押下すると、Rがemacsの中で起動します(左下のウィンドウ)。右のウインドウはヘルプファイルを表示させたところです。
【環境】
VineLinux 3.0beta
emacs 21.3-0vl5
ess 5.2.1-0vl2
R-1.9.1-0.fdr.1
(蛇足) atokxをIIIMECFではなくXIMで使っている軟弱者です。

xemacsとess

essonxemacs.jpg

ESS の設定

MSWindowsユーザーはJohn Foxによる13頁のpdfファイルが役に立つと思います。http://socserv.socsci.mcmaster.ca/jfox/Books/Companion/ESS/ess-xemacs.pdf

色分けの追加

設定ファイル(.emacs)などに以下を追加する。

(set-default-font "-adobe-courier-bold-r-normal--*-140-*-*-m-*-iso8859-1")
(global-font-lock-mode t)                                        ; S/R   TeX
(set-face-foreground 'font-lock-comment-face       "Firebrick")  ; #com  %com
(set-face-foreground 'font-lock-string-face         "SeaGreen")  ; "str" "str"
(set-face-foreground 'font-lock-keyword-face      "MediumBlue")  ; if    \end
(set-face-foreground 'font-lock-constant-face      "VioletRed")  ; fun<- {ctr}
(set-face-foreground 'font-lock-type-face      "DarkGoldenrod")  ; T,F    ?
(set-face-foreground 'font-lock-variable-name-face      "Blue")  ; xv
(set-face-foreground 'font-lock-function-name-face "VioletRed")  ; <-    {eq1}

color-theme.elでもessが導入されていれば自動的に色分けがなされます。

拡張子がrのファイルを読み込んだら自動的にR-modeになる設定

(setq auto-mode-alist
     (cons (cons "\\.r$" 'R-mode) auto-mode-alist))
(autoload 'R-mode "ess-site" "Emacs Speaks Statistics mode" t)

私は (require 'ess-site)でemacs起動時に読み込まれてしまうのが嫌いなので、autoloadを使っています。 Rファイルの先頭行に

#!/usr/bin/Rscript --vanilla --default-packages=utils
# -*- Mode: R; -*-

と記述しておけば、上記の設定がなくても自動的にRモードになります。(最初の一行目はRをスクリプトとして使うときの記述です。e.g. sh foo.r )

何でも掲示板の中間さんの記事より転載 (2004-04-11 (日) 18:09:50)

ヘルプで日本語が出ない。essでの日本語の扱いで旨く行かない話が過去に ありましたが、解決出来ました。

(set-language-environment "Japanese")
(set-default-coding-systems 'euc-japan-unix)
(set-terminal-coding-system 'euc-japan-unix)
(set-keyboard-coding-system 'euc-japan-unix)
(set-buffer-file-coding-system 'euc-japan-unix)
(require 'ess-site)
(define-key ess-mode-map "\177"   'delete-char)
(setq ess-ask-for-ess-directory nil)
(setq ess-pre-run-hook
  '((lambda () (setq S-directory default-directory)
               (setq default-process-coding-system '(euc-japan-unix .   euc-japan-unix))
   )))

setq ess-pre-run-hook に (setq default-process-coding-system '(euc-japan-unix . euc-japan-unix)) があれば幸せになれます。

Meadowの人も(setq default-process-coding-system '(shift_jis . shift_jis)) があれば幸せになれます。

大量のデータの表示 + font-lock(fontifying)で悩まされている方へ

(setq ess-pre-run-hook '(lambda ()
			  (setq font-lock-verbose nil)
			  (require 'font-lock)
			  (add-hook 'font-lock-mode-hook 'turn-on-lazy-lock) 		
			  ))

とすると、C-c C-c で速やかに表示を停止できるかもしれません。

設定例

;; ESSの設定
(setq auto-mode-alist
     (cons (cons "\\.r$" 'R-mode) auto-mode-alist))
(autoload 'R-mode "ess-site" "Emacs Speaks Statistics mode" t)
(setq load-path (cons (expand-file-name "/usr/share/emacs-21.3/site-lisp/ess")   load-path))
(setq ess-pre-run-hook
 '((lambda () (setq S-directory default-directory)
     (setq default-process-coding-system '(euc-japan-unix .   euc-japan-unix))
  )))
(autoload 'R "ess-site" nil 'interactive)
(eval-after-load "R"
'(progn
   (set-language-environment "Japanese")
   (set-default-coding-systems 'euc-japan-unix)
   (set-terminal-coding-system 'euc-japan-unix)
   (set-keyboard-coding-system 'euc-japan-unix)
   (set-buffer-file-coding-system 'euc-japan-unix)
;   (define-key ess-mode-map "\177"   'delete-char)
   (setq ess-ask-for-ess-directory nil)
))

本来はここまでする必要がなく単純に(require 'ess-site) だけでよい。

もし、(小中大)括弧を自動的に閉じる設定がしたいならば、

(defun remap-pair-keys (map)
  (define-key map (kbd "(") 'insert-pair)
  (define-key map (kbd "\"") 'insert-pair)
  (define-key map (kbd "[") 'insert-pair)
  (define-key map (kbd "{") 'insert-pair))
(defun remap-lisp-keys (map)
  (remap-pair-keys map)
  (define-key map (kbd ")") 'move-past-close-and-reindent)
  (define-key map (kbd "M-(") '(lambda()(interactive)(insert "(")))
  (define-key map (kbd "M-)") '(lambda()(interactive)(insert ")"))))
(defun remap-others-keys (map)
  (remap-pair-keys map)
  (define-key map (kbd "'") 'insert-pair))

(add-hook 'ess-mode-hook 
          '(lambda()(remap-other-keys ess-mode-map)))
(add-hook 'inferior-ess-mode-hook
          '(lambda()(remap-other-keys inferior-ess-mode-map)))

と書き加えておけばいい。これで(), [], {}, "",''が自動的に挿入されその真ん中にカーソルが移動するようになります。essやinferior-essモードに限らず他のところにも同じように応用が可能です。


使用方法

ESS には (i) R を Emacs から使う iESS モード,(ii) R スクリプト作成支援環境を提供する ESS[R] モード,(iii) R ヘルプから Example を実行したりできる help[R] モードがあります.

iESS

R 起動 (M-x R)
複数の R を起動することが可能.
R 終了 (C-c C-q)
関連するバッファも全て消してくれる
describe-bindings (M-x describe-bindings)
キーマップ(キーボードショートカット)を表示する(これを見て必要なものを覚えてください。essやinferior-ess-modeそれ以外でも同じようにすればいいです。)
最初からESSモードでemacsを起動する方法
コマンドラインから
$ emacs -f R &
コマンド履歴 (M-p, M-n)
コマンド履歴の検索 (M-r, M-s)
ヘルプ参照 (C-c C-v)
オブジェクト一覧 (C-c C-x)

ESS モード (R モード)

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)
<- の挿入(前後の空白つき)_ (アンダーバー)

加筆をお願いします

ソースの整形

自動インデント整形機能のためコード入力時に自動的に整形されるが、ごにょごにょ編集して再整形の必要が生じたときには、下記のコマンドを使う。

選択範囲を整形(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

help(foo) で開いたヘルプのバッファにおいて,Example の各行に対して l で,コンソールバッファにコピーかつ評価される.

チートシート

各モードのキーバインドをまとめた一覧表。下敷きとかにはさんで使ってください。

cheatsheet.png

参考リンク

ツッコミ、ご要望もこちらから ESS(Emacs Speaks Statistics)のチートシート作った


ESS 利用の流れ

例1:関数を書いてロードする

オブジェクト(関数など)記述

 my.func <- function()
 {
   print( "hello" )
 }

my.func() の定義文のどこか、または、末尾の } の後ろで,

C-c M-f

初回はStarting Data Directroyの場所を尋ねられるが、そのままEnterを押下すると、Rが 自動的に起動し、my.func() の定義文は実行され、Rのスクリプトを編集してい るバッファが2つに分裂し、R実行環境である*R*バッファが現れ、その*R*バッファに カーソルが移動する、という一連の動作が行われる。

例2:編集中のRコードをとにかく実行する

とにかく編集中のRコードを実行するには、

C-c C-c

とする。カーソルが置かれている文脈を自動判別して、パラグラフまたは関数を実行してくれる。パラグラフは、空行で区切られたRコードのかたまりである。もし、Rスクリプトに空行が1行もない場合は、全体が実行されてしまうので、適当に空行を入れる癖をつけた方がよい(と思う)。

例3:要らない部分をコメント化

Rスクリプトの最大の利点の1つが、再実行・再現が簡単な点である。Rスクリプト全体を実行するときに不要になる 部分は、コメント化しておきたい。

コメント化したい部分を選択して

M-x comment-region

で選択部分がコメント化される。次にバッファ全体を実行するには下記のようにする。

C-c C-b

コメント化した部分を元に戻すには、有効化したいRコードを選択して

M-x uncomment-region

とする。


便利な関数

スクリプト作成中にヘルプを見る

ESS[R] モードで関数やスクリプトを書いているときに「あの関数のヘルプを見たい」場合は

 M-x ess-help 関数名

でヘルプバッファが開きます.関数名の補完もしてくれます.

Emacs を利用しているものとは異なる計算機でスクリプトを実行する

Rの起動オプションを渡したい場合

例えば、--vanillaをつけてRを起動したい場合は、設定ファイルに

(setq inferior-R-args "--vanilla")

と書く。


ess-rdired.elとは

ess-rdired.elとは、emacs上でRを使う際に、Rのオブジェクトの一覧表示、プロット、内容表示など便利な機能を提供してくれるLispプログラムである。ess-rdired.elはStephen Eglen氏により開発・提供されている。ESSと一緒に使う。なお、ess 5.2.0以降はessに標準で組み込まれている。

キー割り当て

主なキー割り当て

pオブジェクトをプロット
vオブジェクトの内容を表示
dオブジェクトに削除マークをつける
yミニバッファにオブジェクトの型を表示

その他のキー割り当て

マウス中ボタンオブジェクトの内容を表示
g最新の状態を表示
C-cコマンド
C-p または BS または ↑1行戻る
C-n または SPC または ↓1行進む
qess-rdiredを終了
sオブジェクトを並び替え
Vオブジェクトの内容を個別に表示
u削除マークを解除
?ヘルプ表示
C-c C-z*R*ウィンドウの末尾にジャンプ
C-c C-y*R*ウィンドウにジャンプ
C-c C-s

操作の例

最初に、M-x RでESSを起動し、例えば下記のようなコマンドを実行する

x <- rnorm(20)
y <- sin(seq(from=0, to=8*pi, length=100))
z <- as.data.frame(matrix(rnorm(100), 25, 5))
xyz <- list(x, y, z)

次に、M-x ess-rdiredでess-rdiredを起動する。*R dired*という分割ウィンドウが開く。ここで、オブジェクト名の上で、上述のキーを押下すると、それぞれコマンドが実行される。

ess-rdired.png

R diredに表示されているzの上にカーソルを移動させ、vを押下したところ。*R view*にデータフレームzの内容が表示されている。 [#z8419985]


auto-complete-acr.elとは

テキスト入力中に補完候補を自動的に表示してくれる auto-complete.elをessでも使えるように拡張したもの。本体のソースコードや補完候補を生成するpythonスクリプトはこちら

auto-complete.elはこちらから落とせる。

どのように使えるのかは、こちらのデモをみるとよくわかる。

使い方

ロードパスが通ったディレクトリにauto-complete-acr.elとauto-complete.elを置いて、.emacsに以下の内容を追加。

(require 'auto-complete)
(global-auto-complete-mode t)
(require 'auto-complete-acr)

後はessモードを起動した後、M-x auto-complete-modeをすれば、自動的に補完候補が出てきます。

応用的使い方

 提供されているauto-complete-acr.elにすべてのパッケージの補完候補は入っていません。独自にインストールしたパッケージの補完候補を出したい場合は、補完ライブラリを自作する必要があります。  その場合、このpythonスクリプトを使うと自動的に生成するので、それをauto-complete-acr.elの関数リストと差し替えることでオリジナルのauto-complete-acr.elを作ることができます。

参考リンク

auto-complete.elを拡張するR用のelisp書いた

auto-complete.elを拡張するR用のelispをさらに拡張してみた。


ess-R-object-tooltip.elとは

Rオブジェクトの上にマウスカーソルを載せると、str()やsummary()の内容をツールチップで表示する。 ess-R-object-popup.el という改良版があるのでそちらの方がいいかも。

紹介動画(Youtube)


リンク


EmacsSpeaksStatisticsFAQ 日本語訳

ESSGeneralFAQ

ESS の歴史を教えて下さい.

Emacs Speaks Statistics は S-PLUS のプログラミングに対応した Emacs のモード,S-mode から始まりました.

ESS/S-mode/SAS-mode は誰が初めに作ったものですか.また,その後誰が contribute したのでしょうか.(Who started ESS/S-mode/SAS-mode, and who contributed in the past?)

S-mode: Frank Ritter, Doug Bates, Ed Kademan, David Smith, Martin Maechler, TonyRossini

SAS mode: John Sall, Tom Cook, TonyRossini

R-mode: Martin Maechler, TonyRossini, Kurt Hornik.

Stata-mode: Thomas Lumley, Tony Rossini, Bill ...(?I need to relook this up?)...

ESS : TonyRossini, Martin Maechler, Kurt Hornik, Rich Heiberger, Rodney Sparapani, Stephen Eglen.

ESSUsageFAQ

ESSInstallationFAQ

ESSCustomizationFAQ


コメント




添付ファイル: fileessonxemacs.jpg 2894件 [詳細] filecheatsheet.png 7180件 [詳細] fileess-emacs-toolbar.jpg 3594件 [詳細] fileess-rdired.png 3249件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-12-08 (金) 18:11:46