Ravi: I believe you are under a misconception. The Vectorize() function vectorizes the function call, **but it does not vectorize the computation by moving loops down to the C level**, which is typically what is meant when it is recommended that R users use inbuilt vectorized functions when possible to move looping from the interpreted (R) level to the compiled (C level) code. That is, mapply() -- and thus Vectorize, which is just a wrapper for mapply -- is still looping at the interpreted level and therefore is essentially the same as explicit iterative or *apply loops. It may be a bit faster or slower, depending, but not the orders of magnitude faster that one can get with true vectorized (at the C level) code.
Finally, if you want to just add the integration results to the allvals list, here's a slightly different one-liner to do it: > allvals$vals <- unlist(with(allvals,fv(a,b,m))[1,]) > head(allvals) a b m vals 1 0.0 5 10 0.09207851 2 0.5 5 10 0.09193111 3 1.0 5 10 0.09178672 4 0.0 6 10 0.09083412 5 0.5 6 10 0.09070066 6 1.0 6 10 0.09056960 or the one liner using the previous do.call() construction that just extracts the vector of values: > vals <- unlist(do.call(fv,allvals)[1,]) 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 3:56 PM ravi <rv...@yahoo.se> wrote: > Rui, > Thanks for your help in getting the result with for loops. That is useful, > but I have a complicated integral and I am interested in improving the > performance with the benefit of vectorization. > > In the solution from Bert, I would like to know how I can extract the > numerical vector from the function fv. That is, extract the fv$value as a > vector. I can then perhaps try to improvise and extend it to arrays. > Thanks, > Ravi > > On Saturday, 10 August 2019, 20:03:22 CEST, Bert Gunter < > bgunter.4...@gmail.com> wrote: > > > 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@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@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]] ______________________________________________ R-help@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.