行列をベクトルで割る
行列操作で困っている。
このような行列があったとして
> mat <- matrix(1:6, ncol=3, byrow=TRUE) > mat [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6
こういうベクトルで各行を除したい。
> v <- 1:3 > v [1] 1 2 3
こうすると求めている結果とは違うし
> mat/v [,1] [,2] [,3] [1,] 1 0.6666667 1.5 [2,] 2 5.0000000 2.0
転置したら怒られる。
> mat/t(v) 以下にエラー mat/t(v) : 適切な配列ではありません
仕方ないのでベクトルを最初の行列の行数分繰り返した行列を作り
> vmat <- matrix(rep(v,nrow(mat)), ncol=ncol(mat), byrow=TRUE) > vmat [,1] [,2] [,3] [1,] 1 2 3 [2,] 1 2 3
行列同士で除することで対応している。
> mat/vmat [,1] [,2] [,3] [1,] 1 1.0 1 [2,] 4 2.5 2
しかしこれは回りくどい気もするので他のやり方がないものか。