我有两个函数的包装函数。每个函数都有自己的参数向量。主要思想是将参数向量(向量或两个向量)传递给optim
,然后,我想最大化函数的总和。
由于我的功能太复杂了,所以我尝试提供一个与原始函数类似的简单示例。这是我的代码:
set.seed(123)
x <- rnorm(10,2,0.5)
ff <- function(x, parOpt){
out <- -sum(log(dnorm(x, parOpt[[1]][1], parOpt[[1]][2]))+log(dnorm(x,parOpt[[2]][1],parOpt[[2]][2])))
return(out)
}
# parameters in mu,sd vectors arranged in list
params <- c(set1 = c(2, 0.2), set2 = c(0.5, 0.3))
xy <- optim(par = params, fn=ff ,x=x)
返回此错误:
Error in optim(par = params, fn = ff, x = x) :
function cannot be evaluated at initial parameters
据我所知,我收到此错误是因为optim
无法将参数传递给我的函数的每个部分。那么,我怎么能告诉optim
第一个向量是我函数第一部分的参数,第二个向量是第二部分。
答案 0 :(得分:0)
您应该更改方法参数以使用初始参数。 您可以使用?optim命令阅读有关优化功能的详细说明。 例如,您可以使用“L-BFGS-B”方法来使用上限和下限。