[R] Defining functions inside loops

William Dunlap wdunlap at tibco.com
Mon Nov 15 22:10:16 CET 2010


You could make f[[i]] be function(t)t^2+i for i in 1:10
with
     f <- lapply(1:10, function(i)local({ force(i) ; function(x)x^2+i}))
After that we get the correct results
    > f[[7]](100:103)
    [1] 10007 10208 10411 10616
but looking at the function doesn't immdiately tell you
what 'i' is in the function
    > f[[7]]
    function (x)
    x^2 + i
    <environment: 0x19d7458>
You can find it in f[[7]]'s environment
    > get("i", envir=environment(f[[7]]))
    [1] 7

The call to force() in the call to local() is not
necessary in this case, although it can help in
other situations.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com  

> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Eduardo de 
> Oliveira Horta
> Sent: Monday, November 15, 2010 12:50 PM
> To: r-help at r-project.org
> Subject: [R] Defining functions inside loops
> 
> Hello,
> 
> I was trying to define a set of functions inside a loop, with 
> the loop index
> working as a parameter for each function. Below I post a 
> simpler example, as
> to illustrate what I was intending:
> 
> f<-list()
> for (i in 1:10){
>   f[[i]]<-function(t){
>     f[[i]]<-t^2+i
>   }
> }
> rm(i)
> 
> With that, I was expecting that f[[1]] would be a function 
> defined by t^2+1,
> f[[2]] by t^2+2 and so on. However, the index i somehow 
> doesn't "get in" the
> function definition on each loop, that is, the functions 
> f[[1]] through
> f[[10]] are all defined by t^2+i. Thus, if I remove the 
> object i from the
> workspace, I get an error when evaluating these functions. 
> Otherwise, if
> don't remove the object i, it ends the loop with value equal 
> to 10 and then
> f[[1]](t)=f[[2]](t)=...=f[[10]](t)=t^2+10.
> 
> I am aware that I could simply put
> 
> f<-function(u,i){
>   f<-t^2+i
> }
> 
> but that's really not what I want.
> 
> Any help would be appreciated. Thanks in advance,
> 
> Eduardo Horta
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at 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.
> 



More information about the R-help mailing list