R-alpha: Environment strangeness

Martin Maechler Martin Maechler <maechler@stat.math.ethz.ch>
Tue, 5 Aug 1997 16:22:24 +0200

If you look at the new  'eval' man page that comes with the  a1-->a2
patches, you see that R or R has added a paragraph that somewhat resembles
your proposal.

PD> This belongs on the *manual page*. I suggest something along these
PD> lines:

PD> NOTE( Calling LANG(eval(x+y,e)) does not do what one might think. To
PD> get values of LANG(x) and LANG(y) looked up in the environment
PD> LANG(e), use LANG(eval(expression(x+y),e)). The logic is that
PD> LANG(expr) is usually a simple variable ITALIC(containing) an
PD> expression to evaluate or a LANG(substitute(...)) call
PD> ITALIC(resulting) in an expression. Hence, the value of LANG(expr) is
PD> passed to the evaluator.
PD> )

They don't use any pejorative words such as "counterintuitive" though... ;-)

help(eval)>  The expression expr is evaluated in the environment
help(eval)>  that eval is called from. This allows you to assign
help(eval)>  complicated expressions to symbols and then evaluate
help(eval)>  them. If you want to evaluate expr in envir then you
help(eval)>  must wrap a call to expression around it.
  and later

help(eval)> 	Examples:


help(eval)> 	     tst.ev <- function(a = 7) { x <- pi; y <- 1; ev() }
help(eval)> 	     ev <- function() {
help(eval)> 	          e1 <- sys.frame(sys.parent())
help(eval)> 	          ## Evaluate a in e1
help(eval)> 	          aa <- eval(expression(a),e1)
help(eval)> 	          ## evaluate the expression bound to a in e1
help(eval)> 	          a <- expression(x+y)
help(eval)> 	          list(aa = aa, eval = eval(a, e1))
help(eval)> 	     }
help(eval)> 	     tst.ev()#-> aa : 7,  eval : 4.14
	[R&R: The example was improved by me:  
	      ALL examples should be self-contained executable !]

-- Martin
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch