R は column major, apply の第2引数, 代入演算子

C 系言語を普段使っている私が、R で引っかかったところをメモ。

R の array は column major

C 言語だと、row major。

a <- array(1:24, c(2, 3, 4))

として作った場合、a[1,1,1], a[2,1,1], a[1,2,1], a[2,2,1], a[1,3,1]....という順番になる。

matrix も同様。マニュアルAn Introduction to Rにもあるように 、matrix は、2次元の array である。str() で中身を調べてみると、確かに array と同じ構造をしている。ついでに言うと、vector (c(1,2,3)や1:3として作るやつ) も同じ構造をしている。

しかし、class は vector, matrix, array として区別されているようだ。class は、関数のポリモルフィズムのためにあるとのこと。matrix にしか適用できない関数とかあるので、こういうふうに1,2次元だけを特別扱いするのは必要なことかもしれない。

applyの第2引数

apply の第2引数は上の意味で働くので、上の配列に対して、

apply(a, 3, sum)

とかやると、a[i, j, 1] の和、a[i, j, 2] の和、a[i, j, 3] の和、a[i, j, 4] の和が返ってくる。

R の代入演算子

?assignOps および Assignments with the = Operator によると、= は if の条件文の中などで使えないという。
if (i == 0) のつもりで if (i = 0) と書いてしまうありがち(かつ気づきにくい)バグを防ぐための処置だとか。