Thanks a lot for your readiness! Problem (apparently) solved!

Best regards,

Eduardo Horta

On Mon, Nov 15, 2010 at 7:10 PM, William Dunlap <wdun...@tibco.com> wrote:

> 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-boun...@r-project.org
> > [mailto:r-help-boun...@r-project.org] On Behalf Of Eduardo de
> > Oliveira Horta
> > Sent: Monday, November 15, 2010 12:50 PM
> > To: r-help@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@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.
> >
>

        [[alternative HTML version deleted]]

______________________________________________
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.

Reply via email to