Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R lgamma用户定义函数返回无限值_R_User Defined Functions_Factorial - Fatal编程技术网

R lgamma用户定义函数返回无限值

R lgamma用户定义函数返回无限值,r,user-defined-functions,factorial,R,User Defined Functions,Factorial,这将计算x-1的对数!要返回整数的lgamax值,但我的函数log_gamma仅在x=171时工作,对于x>171,它将返回Inf。如何解决此问题 log_gamma <- function(x){ y <- 1 if (x < 1)( return("Infinity") ) if (x == 1)( return(0) ) x <- x-1 for (i in 1:x){ y <- y*i } r

这将计算x-1的对数!要返回整数的lgamax值,但我的函数log_gamma仅在x=171时工作,对于x>171,它将返回Inf。如何解决此问题

log_gamma <- function(x){
  y <- 1
  if (x < 1)(
    return("Infinity")
  )
  if (x == 1)(
    return(0)
  )
  x <- x-1
  for (i in 1:x){
     y <- y*i
  }
    return(log(y))
}

您当前的解决方案首先计算171!这是一个相当大的数字。相反,使用loga*b=loga+logb这一事实将其计算为总和

log_gamma <- function(x){
  y <- 1
  if (x < 1)(
    return("Infinity")
  )
  if (x == 1)(
    return(0)
  )
  x <- x-1
  for (i in 1:x){
     y <- y + log(i)
  }
    return(y)
}

log_gamma(171)
[1] 707.5731
log_gamma(172)
[1] 712.7147
log_gamma(1000)
[1] 5906.22

非常感谢你