В документе R outer()
аргумент FUN
ограничен векторизацией .Короче говоря, двоичная функция, которую вы вызываете в outer()
, должна удовлетворять свойству много-к-одному , то есть FUN(c(-1, 0, 1), 0)
должна быть исполняемой.Ваша функция:
f <- function(x,y){return(dmvnorm(c(x, y), mu_prior, sigma_prior))}
не может справиться с f(c(-1, 0, 1), 0)
.Есть два способа сделать его векторизованным:
(1) cbind()
f1 <- function(x,y){return(dmvnorm(cbind(x, y), mu_prior, sigma_prior))}
z1 <- outer(grid, grid, f1)
contour(grid, grid, z1)
(2) Vectorize()
f2 <- Vectorize(f) # It's slower than the former.
z2 <- outer(grid, grid, f2)
contour(grid, grid, z2)
![enter image description here](https://i.stack.imgur.com/Ya5m2.png)