On 17/04/2008 5:37 PM, Peter Waltman wrote: > Hi - > > I'm having a really hard time w/understanding R's get function, and would > appreciate any help with this. > > Specifically, I'm using a for loop to call a function. I'd like the > function to have access to the variable being incremented in the for-loop, > i.e. > > t.fn <- function() return( get( "i" ) ) > > t.fn2 <- function() { > for ( i in 1:5 ) > cat( t.fn(), "\n" ) > > } > > However, I keep getting err msg's from the 'get' function about how it can't > find the 'i' variable. > > I've tried various combinations w/in the get fn, i.e. passing inherits=T > (should be the default val according to R's help) and envir=sys.frame(). > > As I understand it, 'get' should search the enclosing environments, which I > assume would be the call-stack of the functions. If not, could someone > clarify?
The R Language manual describes this; R uses lexical scope. get() will search the calling environment, and its parent -- which in your case is where t.fn was defined -- and the parent of that environment, etc. The call stack is not searched. There are ways to look up the stack; passing envir=parent.frame() to get will work for your needs. But it's not a natural thing to do in R; it means your t.fn wouldn't work if it was called from anywhere but t.fn2. So why not define it there, and then i would be visible to it without this trickery? I.e. t.fn2 <- function() { t.fn <- function() return( i ) for ( i in 1:5 ) cat( t.fn(), "\n" ) } Duncan Murdoch > > Thanks, > > Peter > > p.s. when I define t.fn to be: > > t.fn<- function() { > for ( j in sys.nframe():0 ) cat( j,":",ls( sys.frame( j ) ), "\n" ) > } > and call that in t.fn2(), I do eventually see the 'i' variable, i.e. >> t.fn2() > 2 : j > 1 : i > 0 : test t.fn t.fn2 t.fn3 > > [[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.