R伽马函数NaN警告

R伽马函数NaN警告,r,R,我正试图编写一个R程序来优化函数,但我总是得到gamma(k+1)NaNs生成的警告。我不知道为什么,因为k+1应该很小,但不是零。代码如下: x<-rlnorm(100,0,1) y<-x/(1+x) bernsum<-array(1:100) cvise1<-array(1:100) cvise2=0 cvise<-0 bernsum_temp1=0 bernsum_temp2=0 cvise1_temp1=0 cvise1_temp2=0 func_bern

我正试图编写一个R程序来优化函数,但我总是得到gamma(k+1)NaNs生成的警告。我不知道为什么,因为k+1应该很小,但不是零。代码如下:

x<-rlnorm(100,0,1)
y<-x/(1+x)
bernsum<-array(1:100)
cvise1<-array(1:100)
cvise2=0
cvise<-0
bernsum_temp1=0
bernsum_temp2=0
cvise1_temp1=0
cvise1_temp2=0

func_bernise<-function(bigm)
{
  #Calculate the second part of CVISE
  for (i in 1:100)
{
    z<-y[-i]
    for (j in 1:99)
    {
      for (k in 0:bigm-1)
      {
         bernsum_temp1=bernsum_temp1+bigm*((sum(z[j]<=(k+1)/bigm)-sum(z[j]             
<=k/bigm))/100)*(gamma(bigm)/(gamma(k+1)*gamma(bigm-k+1)))
*(z[j]^k)*((1-z[j])^(bigm-k-1))/50

       }
      bernsum_temp2<-bernsum_temp2+bernsum_temp1
      bernsum_temp1=0
}
bernsum[i]=bernsum_temp2
bernsum_temp2=0
 }



cvise=sum(bernsum)#+sum(cvise1)
return(cvise)
}

bigmtrue=optimize(func_bernise,c(1,15))

x我想我找到问题了。优化例程将“bigm”设置为一些非整数值。所以我必须使用
对于(0中的k:round(bigm-1))

解决这个问题。我希望有其他的优化例程关注整数。

为了调用函数,您需要将函数中使用的所有变量传递给它,或者需要在函数中定义/初始化变量(如果在执行函数结束时使用并丢弃)

例如,在函数中使用以下内容,而不将变量传递给函数:

y
bernsum_temp1      #this is used in an assignment without being initialized
您可以在编写函数时使用

编辑1: 我忘了提到产生NAN的原因是:

gamma(0) = NaN
因此,在第一次通过时,当下列值等于零时,您将得到错误

  • bigm-k+1

您的函数返回
NaN
即使对于整数输入
bigm
。这很奇怪,因为在我进行更改后,程序从未发出警告。不管怎么说,它现在似乎起作用了。谢谢谢谢Aaron Brown先生,我将阅读更多内容并进行相应的修改。是的,误差来自伽马(0)。