Hi: If you look at the error message, you'll see that you removed s before evaluating f, and since an element of s is called in the function....
Try > 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]})) > f[[1]](s) [1] 0.2400 0.4025 0.3444 1.0100 f is a list with 10 components, the first of which is [[1]] function (x) x^2 + s[i] <environment: 0x0000000002a26d48> Each component occupies a different environment. To see what you get, > f[[1]](0.1) [1] 0.21 > for(i in 1:10) print(f[[i]](i)) [1] 1.2 [1] 4.45 [1] 9.38 [1] 16.9 [1] NA [1] NA [1] NA [1] NA [1] NA [1] NA > for(i in 1:10) print(f[[i]](1)) [1] 1.2 [1] 1.45 [1] 1.38 [1] 1.9 [1] NA [1] NA [1] NA [1] NA [1] NA [1] NA HTH, Dennis On Mon, Feb 14, 2011 at 9:50 PM, 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. > [[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.