## Evaluate an (Unevaluated) 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 `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`.

## 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), ...)`

## 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

[Package Contents]