Emacs + ESSでR(for Windows users)

むかーしむかしにWindowsでESSを使う方法についてメモったことがあるのですが(認証がかかっています)、今から見ると古いだけじゃなくて割といい加減なこと書いてるのにうっかり放置してたら某所でふわっと紹介されてしまったのでさすがにアレだなと思ってちょっと急いで書き直しました。

はじめに

Rを便利に使うためのツールとして、Emacsというテキストエディタ上で動くESSというプログラムがあります。

ESS (Emacs Speaks Statistics) は Emacs や XEmacs から R などの統計解析アプリケーションを便利に使ってしまおう,という Lisp プログラムです.(http://www.okada.jp.org/RWiki/index.php?ESS)

特にWindowsではRに付属してくるRguiの機能がやや貧弱で、Rを快適に使えるとは言い難い部分があります。ESSのようなツールは必須と言ってもいいでしょう。
ESSからRを使えるようになるためには次の事を覚える必要があります。

この記事ではこれらのインストールと設定について主に説明しています。Rの使い方については説明していませんが、Web上にはhttp://cse.naro.affrc.go.jp/takezawa/r-tips/r.htmlをはじめとして優れたRの資料が数多く存在しています。Google等で「R 統計」などのキーワードで検索してみると良いでしょう。
なお、以下の記述についてはWindows 7 Professionalにて動作確認などをしています。

Rのインストール

Windows版のRは次のリンク先から入手することができます。

今回はこの記事執筆時点での最新版であるR 2.11.1を使用します。"Download R 2.11.1 for Windows"からインストーラが入手できるのでダウンロードします。
Rのインストール自体はインストーラを実行するだけです。途中の質問は文字化けしているかもしれませんが、特に変更せずに「次へ」を選択してインストールしてしまっても問題はありません。設定は後で変更することもできます。

Rの設定

以下の設定はちょっとしたRのことにあるR User Configrationというツールを使うと簡単にできます。

環境変数

環境変数によってRの設定ファイルやパッケージの保存場所を指定することができます。必須ではありませんが、設定ファイルなどの把握がしやすくなり、Rのバージョンを上げた際などに混乱せずにすみます。
環境変数の設定画面はWindows 7の場合、コントロールパネル→システム(Winキー+Pauseでも開きます)→システムの詳細設定→詳細設定タブ→環境変数と選択することで開きます。ここで、ユーザー環境変数へ次の環境変数を追加しておきます。

変数 説明
R_USER C:\R 設定ファイルの置き場所
R_LIBS C:\R\win-library インストールしたパッケージの置き場所

追加後、Cドライブ直下にRという名前のフォルダを作成し、Windowsを再起動したら環境変数の設定は終了です*1
なお、値については設定例なのでこのとおりにする必要はありません。自分の好きな場所を設定してかまいませんが、パスにはなるべく日本語の文字を含めないようにしたほうが良いと思います。

設定ファイル

設定ファイルは\Program Files\R\R-2.11.1\etc以下に存在していますが、同名のファイルをR_USERで指定したフォルダに設置することでそちらが優先して読み込まれます。今回、Rのコンソールに関する設定を記述するRconsole(Rguiを使用しない場合は必要ありませんが)、R起動時に実行させるスクリプトを記述する.Rprofile、Rのグラフィックエンジンに関するRdevgaという3つのファイルを設置します。いずれも実体はテキストファイルなので必要ならばメモ帳などで編集することができます。
これらの設定ファイルに対し日本語用の設定をしたものが以下の3つです。なお、ファイルはR User Configrationによって作成されたものです。

これらをダウンロードしてR_USERで指定したフォルダに保存したらRに関する設定は終わりです。

Emacsのインストール

Windows向けのEmacsにはいくつかの種類があり、以前の記事ではMeadowという実装を使用していました。しかし、今はNTEmacsというWindows向けのEmacsにいくつかの設定をしたものとCygwin等をパッケージにしたgnupackというものがあります。gnupackは更新が頻繁に行われておりEmacsバージョンが新しいので、WindowsEmacsを使うならgnupackがおすすめです。
まず、以下からgnupackをダウンロードします。

今回ダウンロードしたのはgnupack_basic-4.05aです。NTEmacsのみをダウンロードすることもできますが、早かれ遅かれCygwinvim等は欲しくなるはずなのでgnupackにしておきましょう。
ダウンロードしたファイルを実行するとファイルの解凍先を尋ねてくるので適当なフォルダを指定します。ここではC:\を指定したものとします。解凍が完了すると、C:\gnupack_basic-4.05aというペンギン*2のアイコンのフォルダが出現します。
インストール自体はただ解凍するだけで完了です。フォルダ内のemacs.exeを実行すればemacsが起動するので、好みに応じてデスクトップ等にショートカットを作成しておくと良いでしょう。

Emacsの設定

gnupackでは解凍したフォルダ中のhomeというフォルダがいわゆるホームディレクトリとして扱われます。Windows側の環境変数でHOMEという値を設定していてもgnupack中のEmacs等ではgnupackフォルダ中のhomeが優先されます。ホームディレクトリはよく~という記号(チルダ)で代用されます。例えば"~\.emacs.d\"とあったら、それは"C:\gnupack_basic-4.05a\home\.emacs.d\"と同じ場所を指しています。
Emacsの設定ファイルは昔は.emacsという名前でホームディレクトリに置くのが普通でしたが、現在は~/.emacs.d/init.elというファイルに設定を記述することが推奨されているようです。gnupackの場合も~/.emacs.d/init.elに設定ファイルが置かれています。なお、init.elはテキストファイルなのでメモ帳などで編集できます。もちろんEmacsでも編集できます。
init.elには既に設定が記述されており、ほとんど変更しなくても快適に使うことができます。しかし、Emacsを使い続けると設定ファイルを編集しなければならない場面には頻繁に遭遇します。例えば、次に説明するESSのインストールにおいてもinit.elを編集する必要があります。また、慣例としてEmacsの設定ファイルのことを.emacsと呼ぶことも多くあります。「.emacsに以下の記述を追加」などと書いてあったらinit.elに追加するものだと判断しましょう。
ところで今設定はinit.elに記述すると説明したばかりですが、gnupackではいくつかの設定は解凍したフォルダに含まれているconfig.iniに記述することで行ないます。設定方法はgnupack Users Guideで解説されています。おそらく、起動時のウィンドウ(Emacsではフレームと呼びます)サイズをもう少し大きくしたいと思うことでしょう。ウィンドウサイズはconfig.ini中の[Emacs]と書かれたセクションのgeometryという項目を変更することで設定できます。私の場合は"130x41+60+0"という値を設定していますが、B5ノートを使っているのでなければもう少し大きな値を設定したほうがいいでしょう。
なお、Emacsを起動すると*scratch*という一時ファイルのようなものが開きますが、ここに

(frame-width)

と記述して行末でC-jをタイプするとフレームの今の幅が、

(frame-height)

と記述して行末でC-jをタイプするとフレームの今の高さが出力されます。この値を目安にすると設定しやすいと思います。

ESSのインストール

ESSは次のサイトからダウンロードできます。

DownloadからLatest Released Version(この記事を書いている時点では5.11)の[zip]と書かれている部分をクリックしてダウンロードします。
解凍するとess-5.11というフォルダができると思いますが、これをこのフォルダごと/gnupack_basic-4.05a/app/emacs/site-lisp/の中に移動します。

ESSの設定

init.elに以下の記述を追加します。

;; ESSの設定
(require 'ess-site)
;; R起動時にワーキングディレクトリを訊ねない
(setq ess-ask-for-ess-directory nil)
;; ウィンドウ分割
(defun ess:format-window-1 ()
  (split-window-horizontally)
  (other-window 1)
  (split-window)
  (other-window 1) )
(add-hook 'ess-pre-run-hook 'ess:format-window-1)

(2011/2/23 私の設定はmy-init-el-for-gnupack.el · GitHubにあります)
(require 'ess-site)だけでもESSを使えます。
ウィンドウ分割の設定はESS起動時に画面を3つに分割し、右下でRが起動するような設定になっています。分割が必要なければ書く必要はありません。
ESSの設定は以上です*3
より詳細な設定例はhttp://www.okada.jp.org/RWiki/index.php?ESSEmacsWiki: Emacs Speaks Statisticsを参考にしてみてください。

ESSでできること

設定後、"hoge.R"など、拡張子が".R"になっているファイルを開くとESSモードになります。このとき(でなくともいいのですが)にM-x R(Esc x RもしくはAlt+x R)すると、Emacsの中でRが起動します。また、ツールバーにRという大きなボタンが追加されていると思いますが、これをクリックしても同じようにRが起動します。
編集しているファイルから今起動したRへソースコードを送って実行させることができます。実行の方法にはいくつかあって、例えばC-c C-nなら行単位、C-c C-bならファイル(バッファと呼びます)全体、C-c C-cならパラグラフや関数単位といった具合です。また、ツールバーにある矢印と線が組み合わさったアイコンをクリックしても同じようにソースコードをRへ送って実行させられます。
その他、単に実行するだけではなくC-c C-vでヘルプを引いたり、_とタイプすることで <- を入力したり、様々な機能があります。また、Emacs + ESSをさらに便利に使用するためのelispなども数多く公開されています。
ESSモードにおけるコマンドはESS - Rjpwiki - ESSモード(Rモード)にまとめられています。
また、ESSモード時のメニューバーから[ESS]->[Describe]と選択すると、コマンド一覧を表示させることもできます。

Emacsの使い方を覚えるには

以上でR、Emacs、ESSをWindowsにインストールする方法の解説は終わりです。ただ、このままの状態で、例えばカーソルキーでカーソルを移動させ、書いたコードを一々アイコンをクリックしてRに送り、というような使い方をしていてはRguiと比べてそれほど便利になったと感じることはないかもしれません。
Emacs + ESSを便利に使うためにはやはりEmacsの使い方を覚えなければいけません。普通のWindowsユーザーにとってEmacsの操作方法はやや独特でとっつきにくい部分があるかもしれません。
しかし心配することはありません。Emacsには操作方法を覚えるためのチュートリアルが付属しています!!!*4
メニューバーのHelpからEmacs Tutorialを選択するとチュートリアルのファイルが起動します。そこでは実際にEmacsのコマンドを入力しながら操作方法を学ぶことができるので、数度チュートリアルをこなせばEmacsの基本的な操作方法はマスターすることができるでしょう。

Project Eulerやりましょう

ESSやRやEmacsの使い方を覚えるにはちょっとだけ試行錯誤が必要な適当な問題に取り組むのが一番です。
Project Eulerというサイトがあります。ここにはパソコンを使って解くような数学の問題が数多くあり、解答していくとそれが記録されます。本家サイトは英語ですが、問題の日本語訳なんかも探すとあります(Project Euler - PukiWiki)。
別に沢山解いたからといって特にいいことはないどころかうっかり面接とかで「パソコンで数学の問題解くの楽しいです(^q^」とか言うと変な目で見られる危険性もありますが(http://twitter.com/nozma/status/19821502191)、まあそんなことどうでもいいのでとりあえずやりましょう。

*1:環境変数の設定方法として他のやり方もあります。詳しくはR for Windows FAQ - 2.15 How do I set environment variables?を参照して下さい。

*2:タックス - Wikipedia

*3:ところでこれまでの方法で設定するとR起動時に「起動準備中です - 警告メッセージ: Setting LC_CTYPE=ja_JP.cp932 failed」などと出たうえ、plotなどでR Graphicsデバイスを呼び出したときにメニューが文字化けしてしまうので誰か助けて下さい><

*4:実体はテキストファイルですが