Hi Duncan - Thanks for the reply. Yeah, I understand what I'm doing is a bit weird, but I'm actually calling a few functions w/in the for-loop that need the value of the "i" var, and because I was a bit confused by the concept of environments, I was hoping to avoid having to pass it in as an arg to each function.
Thanks, Peter On Thu, Apr 17, 2008 at 7:25 PM, Duncan Murdoch <[EMAIL PROTECTED]> wrote: > 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. > > > > [[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.