Rでいちいちstr()とかhelp()とかしたくない人は、tooltip使ったらいいかもしれない


恐らく、Rを使うなかで、かなりお世話になる関数にstr()とかsummary()があります。こいつらは、オブジェクトをいろいろと要約してくれる関数で、オブジェクトに期待するデータ型が入ってるかとか、変な計算してないか、とか確認するときにひっじょーに便利な関数。
この他にもRには便利な関数がたくさんあります。いろいろ便利な関数を手足のように使いこなしてこそ、Rの本領が発揮されるのですが、ここのところ加齢のせいか、引数が全く覚えられなくなってきました。んでいちいちhelpを引くのですが、結構面倒くさい。今回はこいつらを解決してくれるtipsをご紹介。

何が嫌なのか

str()なりsummary()は便利なので多用しているのですが、関数が吐き出すオブジェクトを使うことはほとんどありません。つまり、使い捨てな関数なのです。なのでESSではiESSとかにちょろっと書いて確認したりするわけですが、コーディングのテンポが乱されてなんか嫌です。できれば打たずにどうにかしたいなーとかナマグサなことを考えてしまいます。
もう一つの問題は、かなり深刻。昔は暗記ものが大の得意でした。日本史の年号の暗記なんてお手の物。覚えることが負担になることなんてほとんどなかったのです。んが、最近はほんと覚えられなくなってきました。もしかしたら覚えようという気力が起きてないのかもしれませんが、しょっちゅう忘れてしまいます。
特にRの関数は、膨大な引数持ってたりします。ま、引数忘れてもhelp引けば良いのですが、help()引くのも面倒くさい。そう、何もかもが面倒くさい、ダメな人間なのです。

ESSの眠れる機能を呼び起こす

SVNなどを追っていくとよくわかるのですが、ESSはかなり開発のペースが早いです。ので、どんどん新しい機能が追加されていくのですが、誰もドキュメントを整備しないので、実装されても誰か使ってるかわからない機能が結構あったりします。そんな機能の一つにtooltip-show-at-pointがあります。これはESS5.4からサポートされているようなのですが、デフォルトではnilになっているので、多分ほとんどの人が使っていないと思われる眠れる機能。どんなものかちょっと使ってみたいという方は.emacsに次のように書いてみましょう。んで、ふつーにRで書いていくと、変ったところがすぐわかると思います。
[cpp]
(add-hook ‘ess-mode-hook
(lambda ()
(define-key ess-mode-map "(" ‘ess-r-args-auto-show)))
(setq ess-r-args-show-as ‘tooltip)
[/cpp]

この機能を使って、先ほどの面倒くさいことをどうにかします。

まずはgithubからess-R-object-tooltip.elを落としてきて、ロードパスが通ったところに置いておきます。
ess-R-object-tooltip.el at master from myuhe’s auto-complete-acr.el – GitHub
そして、.emacsに(require ‘ess-R-object-tooltip)って書いておきましょう。
んで、ESSでてきとーに書いて関数の上でC-c C-gとしてみましょう。
例えば、データフレームの上ですると次のようなツールチップが上がってきます。
dataframe
これがrnorm()だとこんな感じで引数の説明が上がってきます。
func
つまり、これまで手入力してた面倒くさいこと諸々がキーバインド一発でできちゃうわけですね。ちなみに、すでに書いたようにこの関数はESS5.4以降でないと動きませんので、バージョンが古い人はこの機会にあげておきましょう。

参考リンク

今回のelispはミネアポリス在住の名無しさんからいただきました。便利なelispありがとうございました。
R Object Tooltips in ESS « Blogistic Reflections
ほかにもこんなのあるよーとかあったら教えてください。