因此,我实现了一个计算伽玛函数值的函数。当我尝试将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)
答案 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
}
}