[R] evaluation revisited

Gabor Grothendieck ggrothendieck at gmail.com
Wed Jan 28 11:40:54 CET 2009


The argument to eval.parent is evaluated before eval.parent
ever sees it.  Try issuing this command before you run your
code:

debug(eval.parent)

and look at the value of the arguments as passed to eval.parent
in the debugger.

On Wed, Jan 28, 2009 at 2:29 AM,  <markleeds at verizon.net> wrote:
> I'm still going over old emails and trying to get my head around evaluation
> so I'm persistent if nothing else.
>
>  A while back , an expert sent me below as an exercise in understanding and
> I only got around to it tonight. I understand some of the output but not all
> of it and I put "Why not Zero ?" next to the ones that I don't understand
> based on my reading of the various functions in the help pages. It's either
> my reading comprehension or the evaluation subtleties in R but I just can't
> understand some of them. If any of the expeRts has time to explain the ones
> that I marked with "WHY NOT ZERO ?", it would be much appreciated.
> Obviously, I don't expect a long explanation but I think my problem is that
> I keep thinking that eval.parent and eval(whatever, parent.frame) go back to
> the function that called with.options so f() and do the evaluation in there
> but that doesn't always seem to be the case.  I'm also not so clear on the
> difference between print(x) and L[[len]]. Thanks a lot in advance to anyone
> who can be bothered with below.
>
> with.options <- function(...) {
>  L <- as.list(match.call())[-1]
>  len <- length(L)
>  print(L)
>
>  eval.parent(L[[len]])  # =0 MAKES SENSE
>  eval(L[[len]]) # =1  MAKES SENSE
>  eval(L[[len]],parent.frame()) # =0 MAKES SENSE
>  eval.parent(print(x)) # =1   WHY NOT ZERO ?   Somehow this is different
> from eval.parent(L[[len]])
>  eval(print(x)) # =1   MAKES SENSE
>  eval(print(x),parent.frame()) # =1 # WHY NOT ZERO ? Somehow this is
> different from eval(L[[len]],parent.frame)
>  evalq(print(x)) # =1 MAKES SENSE
>  evalq(print(x),parent.frame()) # =1 MAKES SENSE
>  print("====================")
>
>  x <- 2
>
>  eval.parent(L[[len]]) # =0  MAKES SENSE
>  eval(L[[len]]) # =2  MAKES SENSE
>  eval(L[[len]],parent.frame()) # =0  MAKES SENSE
>  eval.parent(print(x)) # =2  WHY NOT ZERO ?  Somehow this is different from
> eval.parent(L[[len]])
>  eval(print(x))  # 2  MAKES SENSE
>  eval(print(x),parent.frame()) # 2 WHY NOT ZERO ? Somehow this is different
> from eval(L[[len]], parent.frame)
>  evalq(print(x))  # 2   MAKES SENSE
>  evalq(print(x),parent.frame()) # 1 WHY NOT ZERO ?
>  print("====================")
>
> }
>
> x <- 1
>
> f <- function() {
>  x <- 0
>  with.options(width = 40, print(x))
> }
>
> f()
>
> ______________________________________________
> R-help at 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.
>




More information about the R-help mailing list