コメントするのにログインまたは登録しろと。。。
そんなのやだね。登録者数を増やしたいのか。
http://d.hatena.ne.jp/tsutatsutatsuta/20111024
行列の各要素ごとに異なる引数を与えて,同じ関数を適用
applyを使って,行列の行や列ごとに,異なる引数を与えて同じ関数を適用したいときの方法です.
まずこんな行列を作成
> (xx <- t(array(1:12, dim = c(4, 3))))
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
>
列ごとに異なる引数を与えて,各行に同じ関数を適用したいとき.
例えば,第1列なら1,第2列なら2,第3列なら3,第4列なら4を引きたいとき.
> t(apply(xx, 1, function(x){x - 1:4}))
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 4 4 4 4
[3,] 8 8 8 8
>
行ごとに異なる引数を与えて,各列に同じ関数を適用したいとき.
例えば,第1行なら0,第2行なら4,第3行なら8を引きたいとき.
> apply(xx, 2, function(x){x - c(0, 4, 8)})
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 1 2 3 4
[3,] 1 2 3 4
>
それだけです.
===========================
それだけです?
そんな大げさなことする必要はさらさらない。以下で十分
> t(t(xx)-1:4)
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 4 4 4 4
[3,] 8 8 8 8
> xx-c(0, 4, 8)
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 1 2 3 4
[3,] 1 2 3 4
> xx-0:2*4
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 1 2 3 4
[3,] 1 2 3 4