行列とベクトル同士の演算

行列は、要素と、行もしくは列をいれると作ることができる。
行もしくは列どちらかが指定されれば、Rが勝手に足りない方を計算してくれる。

matrix(1:15, nr=3, nc=5)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10   13
[2,]    2    5    8   11   14
[3,]    3    6    9   12   15

要素は列から埋まっていくので、行から埋めたいときは

byrow=TRUE

を指定する。

matrix(1:15, nr=3, nc=5, byrow=TRUE)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15

 
Rのベクトルは、長さが違うと勝手に補完するという機能がある。

Mat <- matrix(1:15, nr=3, nc=5)
v <- c(1, 3, 7)

という行列とベクトルがあって、行列にベクトルを足そう、となると、

Mat + v
     [,1] [,2] [,3] [,4] [,5]
[1,]    2    5    8   11   14
[2,]    5    8   11   14   17
[3,]   10   13   16   19   22

と、列優先で演算する。
どうしても行優先で足したい、という場合は

t(Mat)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
[4,]   10   11   12
[5,]   13   14   15

と転置すれば、足してほしい行が列化することから、これにベクトルを足せばいい。
そして転置しなおせばいい。

t(t(Mat) + v)
     [,1] [,2] [,3] [,4] [,5]
[1,]    2    7   14   11   16
[2,]    9    6   11   18   15
[3,]    6   13   10   15   22

もしくは、

apply

を使って行に対して足すことを考えれば

v1 <- c(1, 3, 6, 8, 10)
apply(Mat, 1, "+", v1)
     [,1] [,2] [,3]
[1,]    2    3    4
[2,]    7    8    9
[3,]   13   14   15
[4,]   18   19   20
[5,]   23   24   25

ってこれ、結果が列で返ってくるんだよな…
演算が列で先にやられるというのは、おそらくmatplotやboxplotが列でデータを取り扱っていること、そもそもデータってヘッダーにIDとか振るんじゃね、ということからだろう。