eval(expr, envir=sys.frame(sys.parent()), enclos=if(is.list(envir) || is.pairlist(envir)) sys.frame(sys.parent())) evalq(expr, envir, enclos)
expr
|
object of mode expression or an ``unevaluated
expression''.
|
envir
|
the environment in which expr is to be
evaluated. May also be a list or an integer as in sys.call .
|
enclos
|
Only relevant if envir is a list. Specifies the
enclosure, i.e. where R looks for objects not found in envir .
|
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. The eval
form evaluates its first
argument before passing it to the evaluator.
This allows you to assign complicated expressions to symbols and then
evaluate them. The evalq
form is equivalent to
eval(quote(expression), ...)
When evaluating expressions in dataframes that has been passed as
argument to a function, the relevant enclosure is often the caller's
environment, i.e. one needs
eval(x, data, sys.frame(sys.parent()))
.
expression
, quote
, sys.frame
,
environment
.eval(2 ^ 2 ^ 3) mEx <- expression(2^2^3); mEx; 1 + eval(mEx) eval({ xx <- pi; xx^2}) ; xx a <- 3 ; aa <- 4 ; evalq(evalq(a+b+aa, list(a=1)), list(b=5)) # == 10 a <- 3 ; aa <- 4 ; evalq(evalq(a+b+aa, 1), list(b=5)) # == 12 ev <- function() { e1 <- sys.frame(sys.parent()) ## Evaluate a in e1 aa <- eval(expression(a),e1) ## evaluate the expression bound to a in e1 a <- expression(x+y) list(aa = aa, eval = eval(a, e1)) } tst.ev <- function(a = 7) { x <- pi; y <- 1; ev() } tst.ev()#-> aa : 7, eval : 4.14