XXXプログラマがRを使うべき理由 (R Advent Calendar 2011)

今日(12/9)はR Advent Calendar 2011で自分の番なので書きます。(日付変わっちゃいましたが…)

しかし全くネタを考えていない、どうしよう。自分から参加表明したのに、気づいたのが今朝で会社から帰ってラピュタを見て「バルス!」とかやってたら日付がかわってた。どうしよう。自分の好きなことは、色んなプログラミング言語を知ることだから、そうだ、色んな言語のプログラマにRの宣伝をしよう。(本当に書きながら思いつきました。適当ですみません。)

その1.C言語プログラマがRを使うべき理由

もし貴方がバリバリのCプログラマで、Numerical Recipes in C なんかもバンバン写経しちゃうような人だったら、Rは遅いと感じるかもしれない。そしてRの世界で速くするためにベクトル化を駆使したりするテクニックを、本末転倒に感じるかもしれない。でも実際にRを使ってみてそのように感じてくれたら、ぜひRコミュニティのみんなにそのことを伝えて欲しい。コミュニティの皆は貴方を決してよそ者扱いすることは無く、「高速なライブラリを書ける逸材」と羨望の眼差しで見つめてくるはずだ。そうなったらもう、ライブラリを書きまくって欲しい。機械学習や数理統計的な知識があれば、論文に書いてあるアルゴリズムを実装してパッケージ化するだけで、もうRコミュニティではヒーローだ。もちろん、既存のパッケージにも非効率な実装はたくさんあるだろうから、それを高速化するだけでも大歓迎されること請け合いである。Rコミュニティは、バリバリのCプログラマを心から待ちわびているはずだ。

その2.JavaプログラマがRを使うべき理由

Javaエンタープライズ向けのミドルウェアや、堅牢なWebアプリケーションを作るにはもってこいの言語だと思うが、そこにデータマイニング的手法のスパイスを振りかけると、一味違ったシステムが出来上がるはずだ。Javaで書かれたライブラリにもデータ分析に便利なApache のCommons MathやMahoutなどのライブラリはたくさんある。でも、RにはJavaとは比べ物にならないくらいのデータマイニング関連パッケージが豊富にそろっている。システム連携?心配無用だ。RはRDBMySQLPostgreSQLはもちろん)アクセス、XMLJSONの読み書きなどは簡単にできる。もし貴方がajax的にブラウザ上のJavascriptとやり取りするWebアプリをバリバリ作れるなら、Rとの連携なんて朝飯前のはずだ。JavaプログラマにとってRは、用意されてるパッケージのバリエーションがJavaと直交的で、外部言語連携のしがいのある数少ない言語といってもいい。

その3.PerlプログラマがRを使うべき理由

もし貴方がPerlをバリバリ使う人だったら、データマイニングもまずはCPANに登録されたライブラリを使ってやろうとするかもしれない。それは合理的だ。CPANには本当にたくさんのデータ分析用のパッケージがある。ニューラルネットしかり、SVMしかり。でも、ちょっと足を伸ばしてRを試してみて欲しい。Rで一番お手軽に読み書きできるデータはテキストファイル(タブ区切りのデータや、CSVファイルなど)なのだ。Perlでテキストデータを作ってRで集計する、という住み分けはもう本当に便利だから是非いっぺん試して欲しい。何を隠そう、このエントリを書いてる僕がPerlとRをそうやって使うのが大好きなんだ。PerlとRを繋ぐグルーはシェルスクリプトかって?ドライバをPerlで書きたかったらCPANにあるStatistics::Rを使うといい。単なるパイプとリダイレクトをラップするだけのライブラリだが、Perlの中でRのほぼ全機能を使えてしまうのでとても便利だ。Perlというネーミングの由来(practical extraction and report language)を思い出して欲しい。抽出とレポート、それにRのデータ分析が加わった力、それこそが本来のコンピューティングの力だと思わないか?

その4.RubyプログラマがRを使うべき理由

Rubyはエレガントなノーテーション、豊富なライブラリ、RoRSinatraといった先進WAFが登場する場、そうした魅力がいっぱい詰まっている。Rubyがあればもう何もいらないとさえ、貴方は思うかもしれない。最近はRubyを科学技術計算に使うことも多くなってきたと聞く。科学技術計算でも演算集約的な部分はごく一部であるため、全体をRubyでくみ上げると拡張性や保守性の面でとてもやりやすくなるというのだ。もし貴方がそのRubyを使った科学技術計算の当事者であるなら、既にRを使っているかもしれない。でも多くのRubyプログラマは科学技術計算に直接かかわることは少ないだろうし、貴方もそんなRubyプログラマの一人かもしれない。誰もがスパコンや高機能ワークステーションを常時使う環境にいるわけじゃないからね。でもちょっと待って。Rubyの思想って「言語処理系が頑張ることでプログラムを書く人間のストレスを極力減らしてプログラミングを楽しくする」ってことだったよね。そうなら、Rもそういう思想で出来てると言っていいと思う。難しい数式を実装しなくてもパッケージを読み込むだけで試せるから「パッケージの中身(アルゴリズムの原理)を知らないのに使うのが凄く上手い人」になることだって可能なんだ。それってとってもRuby的だと思わない?もし貴方がプログラミングの楽しさを損なわない言語としてRubyを愛用しているのなら、Rもきっと気に入ると思うんだ。そうしたら科学技術計算の分野でRubyを使う人と同じような気持ちで、また新たなRubyの魅力を味わうことができると思うんだ。

その5.HaskellプログラマがRを使うべき理由

Haskell!とても抽象的で難しいとされている言語だ。そんな言語を使う貴方はとても自分の頭の良さに自信を持っているに違いない。モナド、アロー、数々のコンテナクラスの計算量オーダのバリエーション。。高階プログラミングを自由自在に使いこなし、離散構造を数式と結びつけて理解し、さらには圏論まで把握してたり、そんな頭のいいHaskellプログラマにとって、Rなんて数あるツールの一つに過ぎないかもしれない。貴方ならいざとなれば自分で論文を読んでどんなアルゴリズムでも好きなプログラミング言語で実装できちゃうのかもしれない。でもそんな貴方だからこそ、車輪の再発明を避けることがとても大切だと思うんだ。Rのパッケージは百花繚乱的で一つ一つが荒削りで、そのままで実運用に使えないものも多いかもしれない。でも特にプロトタイプを作るとき、貴方がHaskellを使ってさくっと書いて想定どおりにシステムが動くように、Rを使えば貴方が想定するアルゴリズムの振る舞いからそれほど大きくはずれることもなく、システムを仮実装できると思う。そういうちょっとした試作用途にはRはうってつけだと思うんだ。貴方のように物凄く頭のいいHaskellプログラマには、もちろん新しいRのパッケージを作ってくれたら物凄く嬉しいけど、それよりもRを使って実用的なシステムのプロトタイプをバンバン作って、少しでも貴方の時間生産性を上げて欲しいんだ。Rはアルゴリズムの実験場だといわれて久しいけれども、データマイニングを使ったアプリケーションがRを使って生み出されることこそ、Rのコミュニティが本当に願っていることだと思うんだ。

そんな感じで

次の@isseing333さん、バトンタッチよろしくです。