Это из-за класса объекта, который возвращается из 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
}
}