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"