On Nov 17, 2010, at 6:44 AM, Eduardo de Oliveira Horta wrote:

Hi!

I was wondering if there are any other functions for numerical integration, besides 'integrate' from the stats package, but which wouldn't require the integrand to be vectorized. Oh, and must be capable of integrating over
(-inf,+inf).

You could modify integrate to suit you specifications, Just substitute this at the beginning of the integrate:

integrateV <- function (f, lower, upper, ..., subdivisions = 100, rel.tol = .Machine$double.eps^0.25,
    abs.tol = rel.tol, stop.on.error = TRUE, keep.xy = FALSE,
    aux = NULL)
{
    f <- match.fun(f)
    ### New material
    options(show.error.messages = FALSE)
if( class(try(integrate(f, upper, lower))) == 'try-error') {f <- Vectorize(f)}
    options(show.error.messages = TRUE)
    ### End new material
    ff <- function(x) f(x, ...)
.
.
.


Passes both your requirements:
> zz<- function(x) 2.0 # the function that fails in the integrate help page
> try(integrateV(zz, 0, 1))
2 with absolute error < 2.2e-14

>  zz<- function(x) dnorm(x) # test of infinite range capacity
> try(integrateV(zz, -Inf, Inf))
1 with absolute error < 9.4e-05


--

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to