интегрировать функцию с R / предотвращать интеграцию для векторной оценки - PullRequest
2 голосов
/ 10 августа 2011

Я хочу интегрировать функцию, определенную с помощью оператора 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 Ответ

2 голосов
/ 10 августа 2011

Вы можете сделать две вещи:

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

)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...