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) と書いてしまうありがち(かつ気づきにくい)バグを防ぐための処置だとか。