That was my thought, and if you are going to be integrating it, you do need to be concerned with efficiency to some extent, I would imagine.
My experience is that Vecotrize() is theoretically interesting and it is great for getting you out of a tight spot like this, but if you can avoid it without too much trouble, so much the better. Bill V. -----Original Message----- From: Phil Spector [mailto:spec...@stat.berkeley.edu] Sent: Thursday, 18 November 2010 2:30 AM To: Venables, Bill (CMIS, Cleveland) Cc: eduardo.oliveiraho...@gmail.com; r-help@r-project.org Subject: Re: [R] Vectors out of lists? Bill - An excellent point, especially if you're concerned about efficiency: > Y = list(sqrt,sin,function(u)u/2) > Ybar0 = function(u) mean(sapply(Y,function(fun)fun(u))) > Ybar1 = function(u) rowMeans(sapply(Y, function(fun) fun(u))) > system.time(one <- Vectorize(Ybar0)(seq(0,1,length=10000))) user system elapsed 1.324 0.000 1.323 > system.time(two <- Ybar1(seq(0,1,length=10000))) user system elapsed 0.004 0.000 0.002 - Phil Spector Statistical Computing Facility Department of Statistics UC Berkeley spec...@stat.berkeley.edu On Wed, 17 Nov 2010, bill.venab...@csiro.au wrote: > Another approach would be > >> Y <- list(sqrt, sin, function(u) u/2) >> Ybar <- function(u) rowMeans(sapply(Y, function(fun) fun(u))) >> >> integrate(Ybar, 0, 1) > 0.4587882 with absolute error < 5.6e-05 >> > > i.e. make the function vectorized directly. > > Note, however, that if you had > > Y[[4]] <- function(u) 1 > > you would need to be careful and use something like > > Y[[4]] <- function(u) rep(1, length(u)) > > or indeed > > Y[[4]] <- Vectorize(function(u) 1) > > for the process to work. > > Bill Venables. > > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf Of Phil Spector > Sent: Wednesday, 17 November 2010 10:24 AM > To: Eduardo de Oliveira Horta > Cc: r-help@r-project.org > Subject: Re: [R] Vectors out of lists? > > Eduardo - > Thanks for the reproducible example! >> Y<-list() >> Y[[1]]<-function(u) sqrt(u) >> Y[[2]]<-function(u) sin(u) >> Y[[3]]<-function(u) 1/2*u >> Ybar = function(u)mean(sapply(Y,function(fun)fun(u))) > > Since integrate requires a function which accepts a vector > and returns a vector, we'd need to use Vectorize() before > trying to integrate: > >> integrate(Vectorize(Ybar),0,1) > 0.4587882 with absolute error < 5.6e-05 > > - Phil Spector > Statistical Computing Facility > Department of Statistics > UC Berkeley > spec...@stat.berkeley.edu > > > > > On Tue, 16 Nov 2010, Eduardo de Oliveira Horta wrote: > >> Thanks, guys... but it seems these suggestions won't work. >> >> Let me try to be more specific with a simple example: >> >> Y<-list() >> Y[[1]]<-function(u) sqrt(u) >> Y[[2]]<-function(u) sin(u) >> Y[[3]]<-function(u) 1/2*u >> >> I wanted something equivalent to >> >> Ybar<-function(u){ >> 1/3*(Y[[1]](u) + Y[[2]](u) + Y[[3]](u)) >> } >> >> but with arbitrary length(Y) and without using any loops. Also, I can't allow >> for discretization, since I must be able to evaluate Ybar at any u, as I'm >> going to integrate it with the function "integrate". >> >> Thanks again, >> >> Eduardo Horta >> >> > ______________________________________________ > 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. > ______________________________________________ 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.