You can also create a local copy of 's' in the function: > s <- c( 0.2, 0.45, 0.38, 0.9) > f <- lapply(1:10, function(i) + local({ force(i) + local_s <- s + function(x)x^2+local_s[i] + })) > rm(s) > f[[2]](4) [1] 16.45 >
On Tue, Feb 15, 2011 at 12:50 AM, Eduardo de Oliveira Horta <eduardo.oliveiraho...@gmail.com> wrote: > Hello again. > > Let me try something a little more intricate. Let's say instead of > forcing evaluation of 'i' I'd want to force evaluation of a vector; > for example: > s <- c( 0.2, 0.45, 0.38, 0.9) > f <- lapply(1:10, function(i)local({ force(i) ; function(x)x^2+s[i]})) > rm(s) > f[[1]](0.1) > Error in f[[1]](0.1) : object 's' not found > > Any thoughts? > > Best regards, > > Eduardo > >> sessionInfo() > R version 2.11.1 (2010-05-31) > x86_64-pc-mingw32 > > locale: > [1] LC_COLLATE=Portuguese_Brazil.1252 LC_CTYPE=Portuguese_Brazil.1252 > [3] LC_MONETARY=Portuguese_Brazil.1252 LC_NUMERIC=C > [5] LC_TIME=Portuguese_Brazil.1252 > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > > other attached packages: > [1] Revobase_4.2.0 RevoScaleR_1.1-1 lattice_0.19-13 > > loaded via a namespace (and not attached): > [1] grid_2.11.1 pkgXMLBuilder_1.0 revoIpe_1.0 tools_2.11.1 > [5] XML_3.1-0 > >> 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. >>>> >>> >> > > ______________________________________________ > 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. > -- Jim Holtman Data Munger Guru What is the problem that you are trying to solve? ______________________________________________ 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.