Я бы определил все аргументы, которые используются в функции. Я имею в виду:
my.theta1 <- 0.2
my.theta2 <- 2
f <- function(u, theta1, theta2)
{
dgamma(u, shape=1/theta1, scale=theta1) *
(dgamma(u, shape=1/theta1, scale=theta1, log=TRUE) -
dgamma(u, shape=1/theta2, scale=theta2, log=TRUE))
}
f <- Vectorize(f)
integrate(f, lower=0, upper=Inf, theta1 = my.theta1, theta2 = my.theta2)
Более явное предотвращение «несчастных случаев», поскольку ваша функция ищет theta1
и theta2
в более высоких (глобальных) средах (которые могут запутаться, если эта функция зарыта глубоко внутри программы).