我可能不合理地寻求帮助调试程序,但我花了一天半的时间在这个非常简单的代码上并且已经没有想法了。我正在尝试针对第一个参数优化一个名为“log.pr.data”的函数。
因为函数 optimize 需要你设置我决定使用的参数的界限nlm
,它只需要一个起点。我已经检查了nlm
确实能够将函数作为参数传递的简单示例。我的问题是在这种特殊情况下我无法将函数作为参数传递。
所以这是目标函数(带有两个打印诊断)。我想就参数 lambda.s 最大化它。(作为一个有趣的问题,我没有在这里最大化可能性。我正在尝试优化重要性采样器。)
log.pr.data<-function(lambda.s,n1,n0,lambda.star,psi0,tobs,g=T.chan){
print("Function log.pr.data")
print(g)
psi.s<-boundary(lambda.s,g,psi0,tobs,n1,n0)
-my.dbinom(n0*lambda.s,n0,lambda.star,log=TRUE)
}
我对命令没有任何问题:
nlm(log.pr.data,p=0.6,n1=n1,n0=n0,lambda.star=lambda.star,psi0=psi0,tobs=tobs)
它工作正常。但我希望能够改变函数 g=T.chan。所以我重新定义了在 log.pr.data 中未指定 g 的函数。换句话说,我只是删除了参数列表中的“=T.chan”。我检查了该功能是否正常。例如使用命令
log.pr.data(l,n1,n0,lambda.star,psi0,tobs,T.chan)
对于“l”的一系列值,它工作正常并给出与参数列表中指定 g=T.chan 的前一个函数相同的值。因此,函数 T.chan 正在正确传递,它出现了。
然后我尝试优化
nlm(log.pr.data,p=0.6,n1=n1,n0=n0,lambda.star=lambda.star,psi0=psi0,tobs=tobs,g=T.chan)
我得到了错误
nlm(function(x) f(x, ...), p, hessian, typsize, fscale, msg, 中的错误:参数中的 NA 值无效
有趣的是,似乎没有一次调用 log.pr.data,因为没有打印“Function log.pr.data”。在早期解决此问题的尝试中,我意识到我正在使用符号“f”来表示正在传递的函数,并且这可能会导致问题,因为nlm
将其目标函数称为“f”。所以我把它改成了“g”。