MatlabからOctave、MaxからPD、SPSSからRへという移行をしようとしています。とにかく10月からどのくらいの規模の予算が手に入り、どんなソフトウェアが使える状態になっているのかわからないので、比較的時間がある今のうちに研究に必要なソフトウェアのうち主要かつ高価なものはすべてフリーウェアに移行しようと考えているのです。市場に出回っていなくて、なおかつ必要なソフト(実験用ソフトなど)は自分でコードを書きますが、その他のものは極力手間とカネを惜しみたいのです。
そんなわけでR言語を独習しています。オブジェクト指向になれてしまった身としては気持ち悪い文法が出てきます。たとえば1500要素の入ったzというベクトルを、3x5x100の三次元行列に変更したいときには、Matlabならnew_z = reshape(z, [3 5 100])
とやるんですが、Rだとdim(z) <- c(3, 5, 100)
です。変数には「行列の大きさ」というメタ情報が付随しているらしく(ここらへんはオブジェクト指向っぽい)、それにアクセスする命令がdim(z)
です。このアクセサ・メソッドがsetterとgetter両方の役割をしているので、何か <- dim(z)
とやればzの大きさを取得でき、dim(z) <- 何か
とやればzに行列の大きさを代入できます。C++やJavaでのz.dim
と同じことなんですが、関数呼び出しと同じ形をしているのが気持ち悪いのです。
他にも、変数名中のピリオドが何の意味もないのも見慣れない気持ち悪さ。例えばshort.velocity
はCやJavaに慣れた人にとってはshort
という構造体やクラスの中にあるvelocity
という変数名なのですが、Rではshort.velocity
でひとつ。構造体のようなものを扱うときにはshort.velocity$hoge
と、$
記号を使います。