ID EN
Miscellaneous

delayedAssign

R Base 3.6.2 🇮🇩 Bahasa Indonesia

DelayedAssign membuat janji untuk mengevaluasi ekspresi tertentu jika nilainya diminta. Ini memberikan akses langsung ke mekanisme evaluasi malas yang digunakan oleh R untuk evaluasi fungsi (yang ditafsirkan).

Syntax

R
delayedAssign(x, value, eval.env = parent.frame(1),
              assign.env = parent.frame(1))

Arguments

Parameter Deskripsi
x a variable name (given as a quoted string in the function call)
value an expression to be assigned to x
eval.env an environment in which to evaluate value
assign.env an environment in which to assign x

Return Value

Fungsi ini dipanggil karena efek sampingnya, yaitu memberikan janji untuk mengevaluasi nilai pada variabel x.

Details

Baik eval.env dan task.env default ke lingkungan yang sedang aktif. Ekspresi yang ditetapkan ke janji oleh DelayedAssign tidak akan dievaluasi sampai akhirnya 'dipaksakan'. Hal ini terjadi ketika variabel pertama kali diakses. Ketika janji tersebut pada akhirnya dipaksakan, janji tersebut akan dievaluasi dalam lingkungan yang ditentukan oleh eval.env (yang isinya mungkin telah berubah untuk sementara waktu). Setelah itu, nilainya ditetapkan dan ekspresi tidak akan dievaluasi lagi.

Contoh

Example
R
# NOT RUN {
msg <- "old"
delayedAssign("x", msg)
substitute(x) # shows only 'x', as it is in the global env.
msg <- "new!"
x # new!

delayedAssign("x", {
    for(i in 1:3)
        cat("yippee!\n")
    10
})

x^2 #- yippee
x^2 #- simple number

ne <- new.env()
delayedAssign("x", pi + 2, assign.env = ne)
## See the promise {without "forcing" (i.e. evaluating) it}:
substitute(x, ne) #  'pi + 2'
# }
# NOT RUN {
### Promises in an environment [for advanced users]:  ---------------------

e <- (function(x, y = 1, z) environment())(cos, "y", {cat(" HO!\n"); pi+2})
## How can we look at all promises in an env (w/o forcing them)?
gete <- function(e_)
   lapply(lapply(ls(e_), as.name),
          function(n) eval(substitute(substitute(X, e_), list(X=n))))

(exps <- gete(e))
sapply(exps, typeof)

(le <- as.list(e)) # evaluates ("force"s) the promises
stopifnot(identical(unname(le), lapply(exps, eval))) # and another "Ho!"
# }

See Also

substitute to see the expression associated with a promise if assign.env is not the .GlobalEnv.