# [R] summing elements in a list of functions

15 messages
Open this post in threaded view
|

## [R] summing elements in a list of functions

 Dear all, I have looked for an answer for a couple of days, but can't come with any solution. I have a set of functions, say: > t0 <- function(x) {1} > t1 <- function(x) {x} > t2 <- function(x) {x^2} > t3 <- function(x) {x^3} I would like to find a way to add up the previous 4 functions and obtain a new function: > rrr <- function(x) {1+x+x^2+x^3} without, actually, having to write it in the previous form (I could have cases with hundreds of functions). I thought that perhaps I could first define a list of functions: > ttt <- list(t0,t1,t2,t3) and then I could use something like "sum", to add up all the elements of the list and obtain another function. I've tried: > rrr <- function(x) {sum(ttt)} but it does not work. Any help with this is greatly appreciated. Cheers, james -- Dr James Foadi Department of Physics University of York York YO10 5DD email: [hidden email] web page: http://www-users.york.ac.uk/~jf117Tel: 0044 1904 434622 Mobile: 0044 7740 678548 ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] summing elements in a list of functions

 Try this: L <- list(function(x) 1, function(x) x, sin, cos) sumL <- function(x) sum(sapply(L, function(f) f(x))) sumL(pi) # pi On 10/20/06, James Foadi <[hidden email]> wrote: > Dear all, > I have looked for an answer for a couple of days, but can't come with any > solution. > > I have a set of functions, say: > > > t0 <- function(x) {1} > > t1 <- function(x) {x} > > t2 <- function(x) {x^2} > > t3 <- function(x) {x^3} > > I would like to find a way to add up the previous 4 functions and obtain a new > function: > > > rrr <- function(x) {1+x+x^2+x^3} > > without, actually, having to write it in the previous form (I could have cases > with hundreds of functions). I thought that perhaps I could first define a > list of functions: > > > ttt <- list(t0,t1,t2,t3) > > and then I could use something like "sum", to add up all the elements of the > list and obtain another function. I've tried: > > > rrr <- function(x) {sum(ttt)} > > but it does not work. > > Any help with this is greatly appreciated. > > Cheers, > > james > -- > Dr James Foadi > Department of Physics > University of York > York YO10 5DD > > email: [hidden email] > web page: http://www-users.york.ac.uk/~jf117> Tel: 0044 1904 434622 > Mobile: 0044 7740 678548 > > ______________________________________________ > [hidden email] 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. > ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] summing elements in a list of functions

 In reply to this post by James Foadi James Foadi <[hidden email]> writes: > Dear all, > I have looked for an answer for a couple of days, but can't come with any > solution. > > I have a set of functions, say: > > > t0 <- function(x) {1} > > t1 <- function(x) {x} > > t2 <- function(x) {x^2} > > t3 <- function(x) {x^3} > > I would like to find a way to add up the previous 4 functions and obtain a new > function: > > > rrr <- function(x) {1+x+x^2+x^3} > > without, actually, having to write it in the previous form (I could have cases > with hundreds of functions). I thought that perhaps I could first define a > list of functions: > > > ttt <- list(t0,t1,t2,t3) > > and then I could use something like "sum", to add up all the elements of the > list and obtain another function. I've tried: > > > rrr <- function(x) {sum(ttt)} > > but it does not work. > > Any help with this is greatly appreciated. rrr <- function(x) sum(sapply(ttt,function(f)f(x))) --    O__  ---- Peter Dalgaard             Ă˜ster Farimagsgade 5, Entr.B   c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K  (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918 ~~~~~~~~~~ - ([hidden email])                  FAX: (+45) 35327907 ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] summing elements in a list of functions

 In reply to this post by James Foadi will this work for you? > t0 <- function(x) {1} > t1 <- function(x) {x} > t2 <- function(x) {x^2} > t3 <- function(x) {x^3} > > t.l <- list(t0,t1,t2,t3) > t.l [[1]] function(x) {1} [[2]] function(x) {x} [[3]] function(x) {x^2} [[4]] function(x) {x^3} > arg.val <- 4  # evaluate for 4 > sum(unlist(lapply(t.l, function(x)x(arg.val)))) [1] 85 On 10/20/06, James Foadi <[hidden email]> wrote: > Dear all, > I have looked for an answer for a couple of days, but can't come with any > solution. > > I have a set of functions, say: > > > t0 <- function(x) {1} > > t1 <- function(x) {x} > > t2 <- function(x) {x^2} > > t3 <- function(x) {x^3} > > I would like to find a way to add up the previous 4 functions and obtain a new > function: > > > rrr <- function(x) {1+x+x^2+x^3} > > without, actually, having to write it in the previous form (I could have cases > with hundreds of functions). I thought that perhaps I could first define a > list of functions: > > > ttt <- list(t0,t1,t2,t3) > > and then I could use something like "sum", to add up all the elements of the > list and obtain another function. I've tried: > > > rrr <- function(x) {sum(ttt)} > > but it does not work. > > Any help with this is greatly appreciated. > > Cheers, > > james > -- > Dr James Foadi > Department of Physics > University of York > York YO10 5DD > > email: [hidden email] > web page: http://www-users.york.ac.uk/~jf117> Tel: 0044 1904 434622 > Mobile: 0044 7740 678548 > > ______________________________________________ > [hidden email] 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. > -- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem you are trying to solve? ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] summing elements in a list of functions

 In reply to this post by James Foadi Here is one way. To have a vectorized version you need to redefine 't0', though t0 <- function(x) {1} t1 <- function(x) {x} t2 <- function(x) {x^2} t3 <- function(x) {x^3} ttt <- list(t0,t1,t2,t3) rrr <- function(x) sum(sapply(seq(along=ttt), function(i) ttt[[i]](x))) ## vectorized version ttt[[1]] <- t0 <- function(x) rep(1, length(x)) rrr2 <- function(x) rowSums(sapply(seq(along=ttt), function(i) ttt[[i]](x))) Hope this helps, Giovanni > Date: Fri, 20 Oct 2006 15:19:06 +0100 > From: James Foadi <[hidden email]> > Sender: [hidden email] > Precedence: list > User-Agent: KMail/1.9.4 > > Dear all, > I have looked for an answer for a couple of days, but can't come with any > solution. > > I have a set of functions, say: > > > t0 <- function(x) {1} > > t1 <- function(x) {x} > > t2 <- function(x) {x^2} > > t3 <- function(x) {x^3} > > I would like to find a way to add up the previous 4 functions and obtain a new > function: > > > rrr <- function(x) {1+x+x^2+x^3} > > without, actually, having to write it in the previous form (I could have cases > with hundreds of functions). I thought that perhaps I could first define a > list of functions: > > > ttt <- list(t0,t1,t2,t3) > > and then I could use something like "sum", to add up all the elements of the > list and obtain another function. I've tried: > > > rrr <- function(x) {sum(ttt)} > > but it does not work. > > Any help with this is greatly appreciated. > > Cheers, > > james > -- > Dr James Foadi > Department of Physics > University of York > York YO10 5DD > > email: [hidden email] > web page: http://www-users.york.ac.uk/~jf117> Tel: 0044 1904 434622 > Mobile: 0044 7740 678548 > > ______________________________________________ > [hidden email] 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. > > --  __________________________________________________ [                                                  ] [ Giovanni Petris                 [hidden email] ] [ Department of Mathematical Sciences              ] [ University of Arkansas - Fayetteville, AR 72701  ] [ Ph: (479) 575-6324, 575-8630 (fax)               ] [ http://definetti.uark.edu/~gpetris/              ] [__________________________________________________] ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] summing elements in a list of functions

 In reply to this post by Gabor Grothendieck Many thanks to those who have answered my question. Could I ask Gabor and Peter the meaning of: > sum(sapply(ttt,function(f) f(x))) I gather that a "mysterious" function f(x) is applied to all components of ttt, and sum can act on this modified object. But what is exactly f? And how does the list object change? Cheers, J -- Dr James Foadi Department of Physics University of York York YO10 5DD email: [hidden email] web page: http://www-users.york.ac.uk/~jf117Tel: 0044 1904 434622 Mobile: 0044 7740 678548 ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] summing elements in a list of functions

 ttt is a list of functions so each function in ttt is passed in turn to the anonymous function as argument f. On 10/20/06, James Foadi <[hidden email]> wrote: > Many thanks to those who have answered my question. > Could I ask Gabor and Peter the meaning of: > > > sum(sapply(ttt,function(f) f(x))) > > I gather that a "mysterious" function f(x) is applied to all components of > ttt, and sum can act on this modified object. But what is exactly f? And how > does the list object change? > > Cheers, > > J > > -- > Dr James Foadi > Department of Physics > University of York > York YO10 5DD > > email: [hidden email] > web page: http://www-users.york.ac.uk/~jf117> Tel: 0044 1904 434622 > Mobile: 0044 7740 678548 > ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## [R] I really don't understand functions in R :-)

 An example: n <- 3 f <- function(x) x^n f(2) # [1] 8 n <- 2 f(2) # [1] 4 f # function(x) x^n Ok, I know this is trivial, because function f is foverer bound to the variable n. But how can I _fix_ n when I define _f_, so that changing _n_ won't change the function f? Alberto Monteiro ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] I really don't understand functions in R :-)

 It sounds like you want to use 'local' to create private variables: > # your example > n <- 3 > f <- function(x) x^n > f(2) [1] 8 > n<-1 > f(2) [1] 2 > # now using 'local' to make 'n' private > f <- local({ + n <- 3 + function(x) x^n + }) > f(2) [1] 8 > n <- 1 > f(2) [1] 8 > Or why not just pass 'n' to the function On 10/20/06, Alberto Monteiro <[hidden email]> wrote: > An example: > > n <- 3 > f <- function(x) x^n > f(2) > # [1] 8 > n <- 2 > f(2) > # [1] 4 > f > # function(x) x^n > > Ok, I know this is trivial, because function f is foverer bound > to the variable n. But how can I _fix_ n when I define _f_, so > that changing _n_ won't change the function f? > > Alberto Monteiro > > ______________________________________________ > [hidden email] 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. > -- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem you are trying to solve? ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] I really don't understand functions in R :-)

 In reply to this post by ALBERTO VIEIRA FERREIRA MONTEIRO On Fri, 20 Oct 2006, Alberto Monteiro wrote: > An example: > > n <- 3 > f <- function(x) x^n > f(2) > # [1] 8 > n <- 2 > f(2) > # [1] 4 > f > # function(x) x^n > > Ok, I know this is trivial, because function f is foverer bound > to the variable n. But how can I _fix_ n when I define _f_, so > that changing _n_ won't change the function f? You need to make sure that n is stored inside the function. One approach is to write a function that makes functions like f(): > make.f<-function(n) {function(x) x^n} > n<-2 > f2<-make.f(n) > n<-3 > f3<-make.f(n) > f2(2) [1] 4 > f3(2) [1] 8 f2() and f3() each have a private copy of n from their enclosing environment.   -thomas ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] I really don't understand functions in R :-)

 In reply to this post by ALBERTO VIEIRA FERREIRA MONTEIRO Is this what you want? > f <- function(x,n=3) x^n > f(2) [1] 8 > n <- 2 > f(2) [1] 8 > f(2,2) [1] 4 Alberto Monteiro wrote: > An example: > > n <- 3 > f <- function(x) x^n > f(2) > # [1] 8 > n <- 2 > f(2) > # [1] 4 > f > # function(x) x^n > > Ok, I know this is trivial, because function f is foverer bound > to the variable n. But how can I _fix_ n when I define _f_, so > that changing _n_ won't change the function f? > > Alberto Monteiro -- Kevin E. Thorpe Biostatistician/Trialist, Knowledge Translation Program Assistant Professor, Department of Public Health Sciences Faculty of Medicine, University of Toronto email: [hidden email]  Tel: 416.946.8081  Fax: 416.946.3297 ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] I really don't understand functions in R :-)

 In reply to this post by jholtman Jim Holtman wrote: > > It sounds like you want to use 'local' to create private variables: > Ok, so, in a "real world" example, I should do something like this: n <- 3 # but here there is some very complex computations # that give me a value for n f <- local({   f.n <- n   function(x) x^f.n }) f(2) # 8 n <- 2 f(2) # 8 Thanks for the enlightnment :-) Alberto Monteiro ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] I really don't understand functions in R :-)

 In reply to this post by ALBERTO VIEIRA FERREIRA MONTEIRO May I am missing something, but it seems to me that the easiest way to solve your problem, if you don't want to change 'n', is to define f <- function(x) x^3 If you want to allow the possibility for 'n' to change, you can include it as an argument of 'f' f <- function(x,n=3) x^n Best, Giovanni > Date: Fri, 20 Oct 2006 14:41:26 -0200 > From: Alberto Monteiro <[hidden email]> > Sender: [hidden email] > Precedence: list > > An example: > > n <- 3 > f <- function(x) x^n > f(2) > # [1] 8 > n <- 2 > f(2) > # [1] 4 > f > # function(x) x^n > > Ok, I know this is trivial, because function f is foverer bound > to the variable n. But how can I _fix_ n when I define _f_, so > that changing _n_ won't change the function f? > > Alberto Monteiro > > ______________________________________________ > [hidden email] 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. > > --  __________________________________________________ [                                                  ] [ Giovanni Petris                 [hidden email] ] [ Department of Mathematical Sciences              ] [ University of Arkansas - Fayetteville, AR 72701  ] [ Ph: (479) 575-6324, 575-8630 (fax)               ] [ http://definetti.uark.edu/~gpetris/              ] [__________________________________________________] ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.