2 行 2 列の行列と、引数の 1 つとして 2 ベクトルを取る関数があるとします。この関数を行列の各行に適用して、n ベクトルを取得したいと思います。R でこれを実行するにはどうすればよいですか?
たとえば、3 つのポイントにおける 2D 標準正規分布の密度を計算したいとします。
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
?
指定した方法で、ポイント以外の引数の値を関数に渡すにはどうすればよいでしょうか?
ベストアンサー1
次の関数を使用するだけです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()
。