ID EN
Environment & Scope

eval

R Base 3.6.2 🇮🇩 Bahasa Indonesia

Evaluasi ekspresi R di lingkungan tertentu.

Syntax

R
eval(expr, envir = parent.frame(),
           enclos = if(is.list(envir) || is.pairlist(envir))
                       parent.frame() else baseenv())
evalq(expr, envir, enclos)
eval.parent(expr, n = 1)
local(expr, envir = new.env())

Arguments

Parameter Deskripsi
expr an object to be evaluated. See ‘Details’.
envir the environment in which expr is to be evaluated. May also be NULL, a list, a data frame, a pairlist or an integer as specified to sys.call.
enclos Relevant when envir is a (pair)list or a data frame. Specifies the enclosure, i.e., where R looks for objects not found in envir. This can be NULL (interpreted as the base package environment, baseenv()) or an environment.
n number of parent generations to go back

Return Value

Hasil evaluasi objek: untuk ekspresi vektor ini adalah hasil evaluasi elemen terakhir.

Details

eval mengevaluasi argumen expr di lingkungan yang ditentukan oleh envir dan mengembalikan nilai yang dihitung. Jika envir tidak ditentukan, maka defaultnya adalah parent.frame() (lingkungan tempat panggilan eval dilakukan). Objek yang akan dievaluasi dapat berupa tipe panggilan atau ekspresi atau nama (ketika nama dicari dalam cakupan saat ini dan pengikatannya dievaluasi), janji atau tipe dasar apa pun seperti vektor, fungsi, dan lingkungan (yang dikembalikan tanpa perubahan). Bentuk evalq setara dengan eval(quote(expr), …). eval mengevaluasi argumen pertamanya dalam lingkup saat ini sebelum meneruskannya ke evaluator: evalq menghindari hal ini. eval.parent(expr, n) adalah singkatan dari eval(expr, parent.frame(n)). Jika envir adalah sebuah daftar (seperti bingkai data) atau daftar pasangan, maka envir akan disalin ke dalam lingkungan sementara

Contoh

Example
R
# NOT RUN {
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))))
# }

See Also

expression quote sys.frame parent.frame environment. Further force to force evaluation typically of function arguments.