### Name: eval ### Title: Evaluate an (Unevaluated) Expression ### Aliases: eval evalq eval.parent local ### Keywords: data programming ### ** 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 <- 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 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) N get("N", envir=env) ## this version does the assignment in env, and changes N only there. evalq(N <- 5, env) N get("N", envir=env) ## ## 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) sapply(1:5, gg) # 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) ls(envir=environment(gg)) ls(envir=environment(get("k", envir=environment(gg))))