如何在 r 中使用 try 或 try catch

问题描述

我正在编写代码以使用 stat::optim 函数估计零膨胀的 beta 二项式分布,并且我在小样本量时收到此错误 L-BFGS-B 需要 'fn' 的有限值 我想知道您是否可以帮助我应用 try catch 以便我的代码在出现错误时不会停止工作?它是如何工作的?我以前没有使用过这个技巧。 任何帮助表示赞赏。代码如下:

if (distr=="bb.zihmle")
    {
    N=length(x)  
    t=x[x>0]  
    m=length(t) 
    neg.log.lik<-function(y) 
      {
      n1=y[1]
      a1=y[2]
      b1=y[3]
     # ans=-sum(dbetabinom(t,n1,a1/(a1+b1),a1+b1,log=TRUE))+m*(1-dbetabinom(0,log=TRUE))
       logA=lgamma(a1+n1+b1)+lgamma(b1)
       logB=lgamma(a1+b1)+lgamma(n1+b1)
       ans = -m *lgamma(n1 + 1) - sum(lgamma(t + a1)) - sum(lgamma(n1-t+b1)) -m * lgamma(a1 + b1) +sum(lgamma(n1 - t + 1))+
                  sum(lgamma(t + 1)) + m * lgamma(a1) +m*log(1-exp(logB-logA))+m*logA
      return(ans)  
    }
    gp<-function(y)
      {
      n1=y[1]
      a1=y[2]
      b1=y[3]
       logA=lgamma(a1+n1+b1)+lgamma(b1)  
       logB=lgamma(a1+b1)+lgamma(n1+b1)
      dn=-m * digamma(n1 + 1) - sum(digamma(n1-t+b1)) + sum(digamma(n1-t+1)) -
                       m*exp(logB-logA)*(digamma(n1+b1)-digamma(a1+n1+b1))/(1-exp(logB-logA))+m*digamma(a1+n1+b1)
      da=-sum(digamma(t+a1))- m * digamma(a1 + b1)+ m * digamma(a1)-
                      m*exp(logB-logA)*(digamma(a1+b1)-digamma(a1+n1+b1))/(1-exp(logB-logA))+m*digamma(a1+n1+b1)
      db=-sum(digamma(n1-t+b1)) - m* digamma(a1+b1) -
            m*exp(logB-logA)*(digamma(a1+b1)+digamma(n1+b1)-digamma(a1+n1+b1)-digamma(b1))/(1-exp(logB-logA))+m*digamma(b1)+m*digamma(a1+n1+b1)
                      
      return(c(dn,da,db))
    }
    estimate=stats::optim(par=c(n,alpha1,alpha2),fn=neg.log.lik,gr=gp,method = "L-BFGS-B",lower = c(lowerbound,lowerbound,lowerbound),upper = c(upperbound,upperbound,upperbound))

此外,下限 = 0.01,上限 = 10000

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...