R

グラフを書きたいので導入。

インストール

CRAN: The Comprehensive R Archive Network からバイナリを持ってきてインストール。
今回は R-2.11.0.pkg を使いました。Snow Leopard でも何の問題もなくインストール完了。

ESS

上記のインストール方法だと GUI ツールもついてくるけど、Emacs から操作したいってことで ESS を導入する(現在のヴァージョンは 5.8)。Emacs Speaks Statistics から zip か tgz を持ってきて展開。Makeconf を適当に編集して make && sudo make install。

# Makeconf の設定例
DESTDIR=/Applications/Emacs.app/Contents/Resources
EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs
LISPDIR=$(PREFIX)/site-lisp/ess
INFODIR=$(PREFIX)/info
ETCDIR =$(PREFIX)/site-lisp/ess/etc

auto-complete-mode 用の拡張もあるので持ってくる。
GitHub: auto-complete-acr.el
.emacs の設定はこんな感じ。面倒な場合は (require 'ess-site) だけでいい。これで .r か .R を読み込むと ess-mode になる。または M-x R-mode。

;;; ESS v5.8 on Emacs 23.2
(autoload 'R-mode "ess-site" "Emacs Speaks Statistics mode" t)
(setq auto-mode-alist (cons '("\\.[rR]$" . R-mode) auto-mode-alist))

(eval-after-load "ess-site"
  '(progn
     (setq ess-ask-for-ess-directory nil)
     ;; キーバインド
     (require 'skeleton)
     (defun my-skeleton-setup ()
       (dolist (var '(skeleton-pair
                      skeleton-pair-on-word))
         (unless (local-variable-p var)
           (set (make-local-variable var) t))))
     (defun my-insert-char-&-space ()
       (interactive)
       (progn (self-insert-command 1)
              (insert " ")))
     (defun my-inferior-ess-key-bindings ()
       (my-skeleton-setup)
       (local-set-key (kbd ",") 'my-insert-char-&-space)
       (local-set-key (kbd "\"") 'skeleton-pair-insert-maybe)
       (local-set-key (kbd "(") 'skeleton-pair-insert-maybe)
       (local-set-key (kbd "{") 'skeleton-pair-insert-maybe)
       (local-set-key (kbd "[") 'skeleton-pair-insert-maybe)
       (local-set-key (kbd "<") (lambda () (interactive) (insert " <- ")))
       (local-set-key (kbd "=") (lambda () (interactive) (insert " = "))))
     (add-hook 'inferior-ess-mode-hook 'my-inferior-ess-key-bindings)
     (defun my-ess-key-bindings ()
       (my-inferior-ess-key-bindings)
       ;; 元の advice を無視しているので注意。(ess-roxy-newline at ess-roxy.el)
       (local-set-key (kbd "<RET>") 'reindent-then-newline-and-indent)
       (set (make-local-variable 'backward-delete-char-untabify-method) 'all)
       (local-set-key (kbd "<DEL>") 'backward-delete-char-untabify))
     (add-hook 'ess-mode-hook 'my-ess-key-bindings)
     ;; auto-complete-acr
     ;; auto-complete-mode の細かい設定は他でやっているので割愛。
     (require 'auto-complete-acr)
     (setq ac-modes (append ac-modes '(ess-mode)))))

使い方(少しだけ)

.xls の読み込み

.xls はそもそも読み込めないらしい(windows だと出来るかも?)。仕方ないので Excel のデータを .csv で保存して読み込む。

# ~/foo.csv のデータを読み込んで変数 data に格納。
data <- read.csv("/path/to/foo.csv", header = T)
プロット
# x, y は属性名。tcl が正の数だと内側に目盛りが出る。
plot(data[,c("x")], data[,c("y")], tcl = .1)
保存
# eps として保存。
dev.copy2eps(file="foo.eps")
# pdf として保存。プロットする前に pdf() しておく。
pdf()
plot()
dev.off()

雑感

少ししか触ってないけど、グラフの体裁を整えるオプションはけっこう多い気がする。少なくとも昔使ってた gnuplot よりはいい感じ。最近 Mathematica を使い始めたのでしばらくそれと併用してみよう。