| eval {base} | R Documentation |
Evaluate an (Unevaluated) Expression
Description
This function 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. 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), ...)
Usage
eval(expr, envir=sys.frame(sys.parent()),
enclos=if(is.list(envir) || is.pairlist(envir))
sys.frame(sys.parent()))
evalq(expr, envir, enclos)
Arguments
expr |
object of mode |
envir |
the |
enclos |
Only relevant if |
Note
Due to the difference in scoping rules, there are some differences between R and S in this area. In particular, the default enclosure in S is the global environment.
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())).
See Also
expression, quote, sys.frame,
environment.
Examples
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