R伽玛功能NaN警告

时间:2013-04-26 20:49:04

标签: r

我正在尝试编写一个R程序来优化函数,但我总是得到伽玛(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))

提前致谢!你可以看到k从0到bigm-1,bigm从1到15优化,从而使k + 1从1到15。

2 个答案:

答案 0 :(得分:3)

为了调用你的函数,你需要传递它中使用的所有变量,或者如果它们在函数执行结束时被使用和丢弃,则需要在函数内定义/初始化变量。

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

y
bernsum_temp1      #this is used in an assignment without being initialized

您可以check out this撰写函数。

EDIT1: 我忘了提到产生NaNs的原因是因为:

gamma(0) = NaN

因此,在您第一次通过时,如果以下等于零,您将收到错误

  • BIGM-K + 1

答案 1 :(得分:0)

我想我遇到了问题。 optimize routine会将“bigm”设置为某些非整数值。所以我必须使用     for(k in 0:round(bigm-1)) 解决问题。我希望有其他优化程序专注于整数。