Lazy evaluation. Consider:
> funlist <- list() > for (i in 1:5)funlist[[i]]<- eval(bquote(function(x)x^.(i))) > str(funlist[[2]]) function (x) - attr(*, "source")= chr "function(x)x^.(i)" > funlist[[2]] function(x)x^.(i) > ## But... > body(funlist[[2]]) x^2L > body(funlist[[3]]) x^3L > > funlist[[2]](2) [1] 4 > funlist[[3]](2) [1] 8 ?bquote See Bill Venables's "Programmer's Niche" Column on "Mind Your Language" in the Vol 2/2, June 2002 R News for a fuller explanation. Note that bquote() is just a kind of "macro-like" version of substitute(). Bert Gunter Genentech Nonclinical Statistics -----Original Message----- From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On Behalf Of Rajat Mukherjee Sent: Wednesday, January 27, 2010 7:37 AM To: r-h...@stat.math.ethz.ch Subject: [R] returning a list of functions Hi interested readers, I have a function that creates several functions within a loop and I would like them to be returned for further use as follows: Main.Function(df,...){ # df is a multivariate data funcList<-list(NULL) for (i in 1:ncol(df)){ temp<-logspline(df[,i],...) # logspline density estimate funcList[[i]]<-function(x){expression(temp,x)} } return(funcList) } I have tried this, unfortunately can't figure out why all the functions returned are identical. Any help towards this will be much appreciated. Thanks. ______________________________________________ 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.