Skip to content
Back to formatted view

Raw Message

Message-ID: <971536df05051322287f4b2a06@mail.gmail.com>
Date: 2005-05-14T05:28:20Z
From: Gabor Grothendieck
Subject: help with eval
In-Reply-To: <726FC6DD09DE1046AF81B499D70C3BCE1FDF36@twinfields02.CORP.TWINFIELDSCAPITAL.COM>

The scope of variables within show.a is not affected by the environment
that show.a is called in.  The scope of the variables in show.a
is determined by the lexical scope of show.a although you can change 
this via:

  environment(show.a) <- my.env
  show.a() # 200

If you want to create a function that has dynamic (i.e. scope is the caller), 
rather than lexical scope, do this:

   show2.a <- function() { 
      show2.a <- function() a 
      environment(show2.a) <- parent.frame()
      show2.a()
   }
  evalq(show2.a(), my.env) # 200

or you can create a function which evaluates its body in the parent.frame:

   show3.a <- function() eval.parent(substitute(a))
   evalq(show3.a(), my.env) # 200

Also, depending on what you actually want to do, the proto package
may be applicable.

On 5/13/05, Whit Armstrong <whit at twinfieldscapital.com> wrote:
> I've been looking at the help page for eval for a while, but I can't
> make sense of why this example does not work.
> 
> show.a <- function() {
>  a
> }
> 
> init.env <- function() {
>  a <- 200
>  environment()
> }
> 
> my.env <- init.env()
> 
> ls(envir=my.env)
> 
> # returns this:
> # > ls(envir=my.env)
> # [1] "a"
> 
> # but this does not work:
> eval(expression(show.a()),envir=my.env)
> 
> # > eval(expression(show.a()),envir=my.env)
> # Error in show.a() : Object "a" not found
> # >
> 
> The help page gives the following:
> 
>   'eval' evaluates the expression 'expr' argument in the environment
>     specified by 'envir' and returns the computed value. If 'envir' is
>     not specified, then 'sys.frame(sys.parent())', the environment
>     where the call to 'eval' was made is used.
> 
> I would be grateful for any help.
> 
> Thanks,
> Whit
> 
>        [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>