2012年2月4日土曜日

Rが使えるフリをするための14の知識

このエントリーをはてなブックマークに追加
Clip to Evernote
Pocket

米国FDAで公認され、ハーバード大学やイェール大学の授業で利用されるようになり、世間での認知度が着実に上昇している統計用プログラミング環境のRだが、ユーザーなのか、ユーザーになりたいのか、ユーザーとして振舞いたいのか分からない人が増えてきた。

スノッブなユーザーとして振舞う場合は、Rの特性を語れる必要があるので、ユーザーになるよりもRへの知識や理解が必要で、実は難易度が高い行動である。それでもあえて意識の高いRユーザーとして振舞いたい人々のために、最低限求められる事のチェック・リストを用意してみた。

1. 参考文献や参考ページを押さえておく
一番大事な事だが、参考文献や参考ページを押さえておこう。公式サイトで配布されている、「R 入門」「R 言語定義」「R のデータ取り込み/出力」は持っておくべきだ。R-TipsRjpWikiも参考になる。
2. 演算子や制御構文をマスターする
四則演算が出来て満足しがちだが、代入演算子、剰余、型チェック、型変換等も滞りなく把握しておこう。他の言語と記述が異なる、%%や->に混乱する人は少なく無い。関数の定義の仕方やループや条件演算などを把握しておく必要は当然ある。
3. ベクトル、行列、リストの操作に習熟する
内積、外積、クロネッカー積などの行列演算も当然だが、行列データの作成方法、連番・連続データの作成、ベクトルに対する論理演算、時系列データの作成、ラベル操作、apply()、ifelse()、unique()、tail()、head()、rbind()、cbind()等は覚えておきたい。factorもダミー変数を作るときに便利だ。C等の他のプログラミング言語の素養がある人は、ここの部分に最初につまづく。
追記(2012/02/04 18:00):コメントで補足されていたが、Rはループ処理ではなくベクトル・行列操作で行う方が圧倒的に高速なので、ここは実用上も重要だ。
4. システム関係の操作に慣れる
ディレクトリ(フォルダー)の変更・確認方法(setwd()/getwd())は絶対に知っておくべきだし、Rのバージョンの確認方法(sessionInfo())もそうであろう。デフォルト動作の設定(options)やメモリー利用状態の確認(e.g. memory.size())、メモリー関連の起動時設定(e.g. --max-vsize)、コマンドラインから扱う方法(e.g. R --vanilla --slaveやcommandArgs())等も把握しておく方が望ましい。
5. データフレームの扱いに習熟する
データフレームの作成、merge()、subset()だけでは無く、列の削除も覚えておく方が望ましい。complete.cases()などを知らずに過ごしている人も多い。実データの分析ではここで詰まる人は多く、データフレームを使いこなせるかは場数を踏んでいる証拠になる。
6. ファイル入出力に習熟する
まさかコンソールからデータ入力を行うわけにも行かないので、CSVファイルなどの入出力には慣れておく必要がある。数字の中にコンマ(,)が入ると文字列として認識されたりするので、Excel等から出力したファイルを扱う場合は注意が必要だ。スクリプト等オブジェクトの入出力の方法も確認しておこう。研究で使っている人には、LaTeXの表の出力方法なども重要になる。
7. 分析用ビルトイン関数やパッケージの扱いになれる
統計解析ができないとRではないので、分析用ビルトイン関数(e.g. lm()、cor()、xtabs())やパッケージの扱いになれる事は必須だ。もちろん取り扱っている分析手法の性質にも通じている必要がある(関連記事:統計学を勉強するときに知っておきたい7つのポイント)。
8. グラフのプロットに慣れる
Rは簡単にプロットする事ができ、それを画面ではなくPNG、PDFやEPSに出力する事もできるので、プレゼンや論文などに扱うのは容易だ。しかし、ラベルなどの位置を調整して綺麗な図にするには、それなり手間がかかる。また、三次元プロットや濃淡プロットもマスターしておく方が使いこなしている雰囲気が出る。
9. テキスト処理に慣れる
Rでは書式付出力や正規表現も扱う事ができるが、意外に見落としている人は多い。入力データにゴミ文字列などが混じっている場合は正規表現による処理は便利だし、処理済みデータを整形した配布したい場合などは書式付出力は必須になるであろう。
10. Lexical ScopingとEnvironmentを理解する
Rの特色だが、C言語やJavaの静的スコープと異なり、Perlのような辞書的スコープが用いられる。これは高階関数の記述を簡潔にできるが、挙動に注意が必要だ。また、Environmentと言う、名前空間やメモリー空間の分離に使える機能が導入されている。
11. 表現式、モデル式、関数呼び出し、遅延評価を理解する
表現式は代入演算や微積分が可能だが、substitute()には癖があるし、D()は複雑な式は微分できない。モデル式からデータフレームや行列を簡単に作れる(e.g. model.frame())ことは余り知られていないが、独自関数を書くなら知っておいた方が良い。また関数呼び出しや遅延評価は、Rの動作を深く理解するためには知っておいた方が良い。
12. S3/S4クラスに慣れる
Rの“オブジェクト指向”は、JavaやC++やObjective-Cとは大きく異なる部分がある。オブジェクトを作ればすぐ分かるのだが、メソッドの実装方法が総称関数を中心としたデザインとなっており、プログラミング言語としてのRを把握する上では、S3/S4クラスに慣れる事は欠かせない。
13. デバッグに慣れておく
Rはbrowser()とdebug()でデバッグ・モードに入れるので、その使い方には慣れておこう。関連してstop()やwarning()の挙動も良く把握しておく方が望ましい。
14. 拡張の作り方を知っておく
R の拡張を書く」を読めばいいだけなのだが、パッケージのまとめ方や高速な他言語との連携方法は、応用範囲が広がるだけではなくトラブル・シューティングの意味でも知っておく方が望ましい。

一般的なユーザーならば(1)から(8)まで、マニアックに使う人は(1)から(13)、コンピューティングに慣れている人は(1)から(14)までは問題ないと思う。リストの全てを問題なくクリアしていれば、Rに関して地獄のミサワ的な発言をしていても、社会的に許容されるはずだ。

ウザイ人を見るよりは、ウザイ人になるほうが精神衛生上はいいわけで、チェック・リストを全てクリアする事によって精神的な安定を得られる。最近、心に何かの不安を抱えている統計使いは、ぜひRのマスターに努力して頂きたい。なお、私は遠慮させて頂きます。

0 コメント:

コメントを投稿