以下では要素に対する掛算の例であるが,足し算,引き算,わり算,べき乗など何でも同じである。
具体例:
行列 x <- matrix(1:12, byrow=TRUE, nc=3)
> x
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
の各列をそれぞれ,2, 5, 10 倍したい
プログラム例 1:
> x <- matrix(1:12, byrow=TRUE, nc=3)
> f <- c(2, 5, 10)
> for (i in 1:3) { # for 文を使うのは R らしくない
+ x[,i] <- x[,i]*f[i]
+ }
> x
[,1] [,2] [,3]
[1,] 2 10 30
[2,] 8 25 60
[3,] 14 40 90
[4,] 20 55 120
プログラム例 2:
> x <- matrix(1:12, byrow=TRUE, nc=3)
> f <- c(2, 5, 10)
> ff <- matrix(f, byrow=TRUE, nrow=4, ncol=3) # x と同じ大きさの行列を作る(メモリーの無駄だと思う)
> ff
[,1] [,2] [,3]
[1,] 2 5 10
[2,] 2 5 10
[3,] 2 5 10
[4,] 2 5 10
> x <- x*ff
> x
[,1] [,2] [,3]
[1,] 2 10 30
[2,] 8 25 60
[3,] 14 40 90
[4,] 20 55 120
プログラム例 3:
> x <- matrix(1:12, byrow=TRUE, nc=3)
> f <- c(2, 5, 10)
> x <- t(t(x)*f) # 転置行列にすれば,倍数ベクトルはリサイクルされる。演算後に結果を転地してもとのサイズに戻す
> x # R らしいかもしれない
[,1] [,2] [,3]
[1,] 2 10 30
[2,] 8 25 60
[3,] 14 40 90
[4,] 20 55 120
各行を定数ベクトル倍するときには転置無用
> x <- matrix(1:12, byrow=TRUE, nc=3)
> x*c(2, 3, 5, 8) # 各行を,2, 3, 5, 8 倍する
[,1] [,2] [,3]
[1,] 2 4 6
[2,] 12 15 18
[3,] 35 40 45
[4,] 80 88 96