Examples for 'base::eval'


Evaluate an (Unevaluated) Expression

Aliases: eval evalq eval.parent local

Keywords: data programming

### ** Examples

eval(2 ^ 2 ^ 3)
[1] 256
mEx <- expression(2^2^3); mEx; 1 + eval(mEx)
expression(2^2^3)
[1] 257
eval({ xx <- pi; xx^2}) ; xx
[1] 9.869604
[1] 3.141593
a <- 3 ; aa <- 4 ; evalq(evalq(a+b+aa, list(a = 1)), list(b = 5)) # == 10
[1] 10
a <- 3 ; aa <- 4 ; evalq(evalq(a+b+aa, -1), list(b = 5))        # == 12
[1] 12
ev <- function() {
   e1 <- parent.frame()
   ## 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
$aa
[1] 7

$eval
[1] 4.141593
a <- list(a = 3, b = 4)
with(a, a <- 5) # alters the copy of a from the list, discarded.

##
## Example of evalq()
##

N <- 3
env <- new.env()
assign("N", 27, envir = env)
## this version changes the visible copy of N only, since the argument
## passed to eval is '4'.
eval(N <- 4, env)
[1] 4
N
[1] 4
get("N", envir = env)
[1] 27
## this version does the assignment in env, and changes N only there.
evalq(N <- 5, env)
N
[1] 4
get("N", envir = env)
[1] 5
##
## Uses of local()
##

# Mutually recursive.
# gg gets value of last assignment, an anonymous version of f.

gg <- local({
    k <- function(y)f(y)
    f <- function(x) if(x) x*k(x-1) else 1
})
gg(10)
[1] 3628800
sapply(1:5, gg)
[1]   1   2   6  24 120
# Nesting locals: a is private storage accessible to k
gg <- local({
    k <- local({
        a <- 1
        function(y){print(a <<- a+1);f(y)}
    })
    f <- function(x) if(x) x*k(x-1) else 1
})
sapply(1:5, gg)
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
[1] 11
[1] 12
[1] 13
[1] 14
[1] 15
[1] 16
[1]   1   2   6  24 120
ls(envir = environment(gg))
[1] "f" "k"
ls(envir = environment(get("k", envir = environment(gg))))
[1] "a"

[Package base version 4.2.3 Index]