将函数与R集成/防止集成以矢量方式评估被积函数

时间:2011-08-09 20:45:58

标签: r

我想整合一个用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)

1 个答案:

答案 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