2017-04-09 30 views
1

我想知道是否有办法可以更简洁地编写下面的函数?使函数更简洁R

Likelihood = function(x) dnorm(250, mean = x, sd = 10)*dnorm(265, mean = x, sd = 10)*dnorm(259, mean = x, sd = 10) 
+0

'x'多久了? –

+0

@BenBolker,支持从220到300. – rnorouzian

回答

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不标。

+0

什么是BUT? –

+0

已接受并向上投票。但是,如果我想使用'Like.function = curve(Likelihood,ylab = bquote(bolditalic('L'〜(mu))),从= 220到= 300,las = 1,lwd = 3,n = 1e + 4,bty ='n')'我不能用曲线来绘制它。但如果我使用我的原始版本,我可以使用'curve()'! – rnorouzian

+0

@parvinkarimi你没有指定'x'可能是一个长度为> 1L'的向量。我添加了两个新版本,这些版本是为'x'矢量化的。 –