在R中使功能更简洁

rno*_*ian 1 r function

我想知道是否有一种方法可以更简洁地编写下面的函数?

Likelihood = function(x) dnorm(250, mean = x, sd = 10)*dnorm(265, mean = x, sd = 10)*dnorm(259, mean = x, sd = 10)
Run Code Online (Sandbox Code Playgroud)

Nic*_*edy 7

你可以利用dnorm矢量化的事实:

Lik2 <- function(x) prod(dnorm(c(250, 265, 259), x, 10))
Run Code Online (Sandbox Code Playgroud)

如果length(x)可以>1L,您将需要使用替代版本.使用基数R:

Lik3 <- function(x) sapply(lapply(x, dnorm, x = c(250, 265, 259), 10), prod)
Run Code Online (Sandbox Code Playgroud)

使用purrr包:

Lik4 <- function(x) map_dbl(x, ~prod(dnorm(c(250, 265, 259), ., 10)))
Run Code Online (Sandbox Code Playgroud)

但是,我怀疑如果x不是标量,你的原始版本的计算效率更高.