1. ホーム
  2. r

[解決済み] 行列またはデータフレームの各行に対して関数を適用する

2022-05-10 22:19:30

質問

n x 2 の行列と、2-ベクトルを引数の1つとする関数があるとします。私は、行列の各行に関数を適用し、n-ベクトルを取得したいと思います。Rでこれを行うにはどうすればよいですか?

例えば、2次元標準正規分布の密度を3点上で計算したい。

bivariate.density(x = c(0, 0), mu = c(0, 0), sigma = c(1, 1), rho = 0){
    exp(-1/(2*(1-rho^2))*(x[1]^2/sigma[1]^2+x[2]^2/sigma[2]^2-2*rho*x[1]*x[2]/(sigma[1]*sigma[2]))) * 1/(2*pi*sigma[1]*sigma[2]*sqrt(1-rho^2))
}

out <- rbind(c(1, 2), c(3, 4), c(5, 6))

の各行に関数を適用する方法。 out ?

ポイント以外の引数の値を、指定した方法で関数に渡すにはどうしたらよいでしょうか?

どのように解決するのですか?

単に apply() 関数を使用します。

R> M <- matrix(1:6, nrow=3, byrow=TRUE)
R> M
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6
R> apply(M, 1, function(x) 2*x[1]+x[2])
[1]  4 10 16
R> 

これは行列を受け取り、それぞれの行に(愚かな)関数を適用します。この関数には,4番目,5番目,...の引数として,追加の引数を渡します. apply() .