首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R gamma函数NaN警告

R gamma函数NaN警告
EN

Stack Overflow用户
提问于 2013-04-27 04:49:04
回答 2查看 2.8K关注 0票数 1

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

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

发布于 2013-04-28 05:22:52

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

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

代码语言:javascript
复制
y
bernsum_temp1      #this is used in an assignment without being initialized

你可以在编写函数时使用check out this

EDIT1:我忘记提到生成NaN的原因是因为:

代码语言:javascript
复制
gamma(0) = NaN

因此,在您第一次通过时,当以下代码等于零时,您将得到错误

  • bigm-k+1
票数 3
EN

Stack Overflow用户

发布于 2013-04-27 05:08:07

我想我找到问题所在了。优化例程会将"bigm“设置为一些非整数值。所以我必须使用for (k in 0:round(bigm-1))来解决这个问题。我希望有其他专注于整数的优化例程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16245107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档