手动编写的函数与gamma函数的行为不同

时间:2019-10-16 13:55:16

标签: r

因此,我实现了一个计算伽玛函数值的函数。当我尝试将f5(a)与数字相乘时,会收到错误:结果错误* f5(a):二元运算符的非数字参数,如果我改为使用结果* gamma(a),这是预定义函数它工作正常。即使它返回与gamma相同的结果,似乎也不允许我对f5进行任何算术运算

f5 <- function(a)
{
  f <- function(x)
    x^(a-1)*exp(-x)
  integrate(f, 0, Inf)

}

f6 <- function(a)
{
  if (a < 0)
    print("a is negative")
  else if (a%%1 == 0)
    return (factorial(a-1))
  else 
  {
    result <- 1
    while (a > 1)
    {
      result <- result * (a - 1)
      a <-  a - 1
    }
    result <- result * f5(a)
    result

  }
}

gamma(0.3)
f5(0.3)
f6(0.3)

1 个答案:

答案 0 :(得分:3)

这是由于从f5()返回的对象类。

class(f5(0.3)) 
[1] "integrate"

这是一个命名列表对象,您可以从中调用特定值:

names(f5(a))
[1] "value"        "abs.error"    "subdivisions" "message"      "call"  

您需要值组件。将f6()修改为以下代码即可使其正常工作:

f6 <- function(a){
  if (a < 0){
    print("a is negative")
  }else if (a%%1 == 0){
    return (factorial(a-1))
  }else{
    result <- 1
    while (a > 1){
      result <- result * (a - 1)
      a <-  a - 1
    }
    result <- result * f5(a)$value
    result
  }
}