我想知道是否有辦法可以更簡潔地編寫下面的函數?使函數更簡潔R
Likelihood = function(x) dnorm(250, mean = x, sd = 10)*dnorm(265, mean = x, sd = 10)*dnorm(259, mean = x, sd = 10)
我想知道是否有辦法可以更簡潔地編寫下面的函數?使函數更簡潔R
Likelihood = function(x) dnorm(250, mean = x, sd = 10)*dnorm(265, mean = x, sd = 10)*dnorm(259, mean = x, sd = 10)
您可以利用的事實,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
不標。
什麼是BUT? –
已接受並向上投票。但是,如果我想使用'Like.function = curve(Likelihood,ylab = bquote(bolditalic('L'〜(mu))),從= 220到= 300,las = 1,lwd = 3,n = 1e + 4,bty ='n')'我不能用曲線來繪製它。但如果我使用我的原始版本,我可以使用'curve()'! – rnorouzian
@parvinkarimi你沒有指定'x'可能是一個長度爲> 1L'的向量。我添加了兩個新版本,這些版本是爲'x'矢量化的。 –
'x'多久了? –
@BenBolker,支持從220到300. – rnorouzian