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 <murdoch@stats.uwo.ca>
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]]

