[R] vectorizing the integrate function

Bert Gunter bgunter@4567 @end|ng |rom gm@||@com
Sat Aug 10 20:03:08 CEST 2019


Ravi:

First of all, you're calling Vectorize incorrectly. The first argument must
be a function *name*, not a function call. Here's what you need to do (and
thanks for the reprex -- wouldn't have been able to help without it!):

f2 <- function(a,b,c)integrate(function(x){exp(-a*x^3-b*x^2-c*x)},lower
=0,upper = Inf)
fv <- Vectorize(f2,vectorize.args=c("a","b","c"),SIMPLIFY=TRUE)

Second of all, as you may realize, the vectorization uses mapply() and so
vectorizes the c(a,b,c) triplet "in parallel," which will "recycle" shorter
arguments to the length of longer. Hence you will get 6 results from your
example:

> fv(a,b,m)
             [,1]         [,2]         [,3]        [,4]         [,5]
  [,6]
value        0.09207851   0.0635289    0.04837997  0.08856628   0.06224138
  0.04777941
abs.error    3.365173e-08 3.108388e-06 1.00652e-09 3.284876e-09
1.796619e-08 6.348142e-09
subdivisions 2            1            2           2            2
 2
message      "OK"         "OK"         "OK"        "OK"         "OK"
  "OK"
call         Expression   Expression   Expression  Expression   Expression
  Expression

Cheers,
Bert

Bert Gunter

"The trouble with having an open mind is that people keep coming along and
sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Sat, Aug 10, 2019 at 10:20 AM ravi via R-help <r-help using r-project.org>
wrote:

> Hi all,I am having some difficulties in vectorizing the integrate
> function. Let me explain with an example.
> a <- 10; b <- 3; c <- 4
> f <- function(x) {exp(-a*x^3-b*x^2-c*x)}
> integrate(f,0,Inf) # works fine
>
> My difficulties start when I want to vectorize.
>
> # attempts to vectorize fail
> a <- seq(from=0,to=1,by=0.5)
> b <- seq(from=5,to=10,by=1)
> m <- seq(from=10,to=20,by=5)
> f2 <- function(x,a,b,c) {exp(-a*x^3-b*x^2-m*x)}
> fv <-
> Vectorize(integrate(f2,0,Inf),vectorize.args=c("a","b","m"),SIMPLIFY=TRUE)
>
> I want the result as a 3-d array with dimensions of the lengths of a, b
> and c. I have tried several variants but am not having much luck. Will
> appreciate any help that I can get.
> Thanks,Ravi Sutradhara
>
>
>
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list