我想整合一个用if语句定义的函数。问题是R函数“整合”评估我的函数的几个x值,好像它是一个矢量,所以我收到一个警告,告诉我只对矢量的第一项评估条件。因此,我的条件没有被考虑在内,以下程序返回零除错误。 有没有办法规避这一点。
f1 <- function(x) dnorm(x,0,1)
myInt <- function(f,lower,upper){
f <- match.fun(f)
integrand <- function(x) if (f(x)==0) 0 else 1/f(x)
integrate(integrand,lower,upper)
}
a=myInt(f1,-Inf,Inf)
答案 0 :(得分:2)
你可以做两件事:
1)你可以写出不同的函数,因此它是矢量化的:
integrand <- function(x) ifelse(f(x) == 0, 0, 1/f(x))
2)你可以在其上调用“Vectorize”使其矢量化
g = Vectorize(f)
(另外我认为浮点恶作剧可能会在这里发挥作用:
> f(38)
[1] 1.097221e-314
> 1/f(38)
[1] Inf
)