我想知道是否有一种方法可以更简洁地编写下面的函数?
Likelihood = function(x) dnorm(250, mean = x, sd = 10)*dnorm(265, mean = x, sd = 10)*dnorm(259, mean = x, sd = 10)
答案 0 :(得分:7)
您可以利用dnorm
向量化的事实:
Lik2 <- function(x) prod(dnorm(c(250, 265, 259), x, 10))
如果length(x)
可以是>1L
,则您需要使用替代版本。使用基数R:
Lik3 <- function(x) sapply(lapply(x, dnorm, x = c(250, 265, 259), 10), prod)
使用purrr
包:
Lik4 <- function(x) map_dbl(x, ~prod(dnorm(c(250, 265, 259), ., 10)))
但是,如果x
不是标量,我怀疑你的原始版本的计算效率更高。