Rev 38201 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{delayedAssign}\alias{delayedAssign}\alias{promise}\alias{promises}\title{Delay Evaluation}\description{\code{delayedAssign} creates a \emph{promise} to evaluate the givenexpression if its value is requested. This provides direct accessto the \emph{lazy evaluation} mechanism used by \R for the evaluationof (interpreted) functions.}\usage{delayedAssign(x, value, eval.env = parent.frame(1),assign.env = parent.frame(1))}\arguments{\item{x}{a variable name (given as a quoted string in the function call)}\item{value}{an expression to be assigned to \code{x}}\item{eval.env}{an environment in which to evaluate \code{value}}\item{assign.env}{an environment in which to assign \code{x}}}\value{This function is invoked for its side effect, which is assigninga promise to evaluate \code{value} to the variable \code{x}.}\details{Both \code{eval.env} and \code{assign.env} default to the currently activeenvironment.The expression assigned to a promise by \code{delayedAssign} willnot be evaluated until it is eventually ``forced''. This happens whenthe variable is first accessed.When the promise is eventually forced, it is evaluated within theenvironment specified by \code{eval.env} (whose contents may have changed inthe meantime). After that, the value is fixed and the expression willnot be evaluated again.This function is meant to replace the \code{delay()} function, to make itmore difficult for R code to see ``naked'' promises.}\seealso{\code{\link{substitute}}, to see the expression associated with a promise.}\examples{msg <- "old"delayedAssign("x", msg)msg <- "new!"x #- new!substitute(x) #- msgdelayedAssign("x", {for(i in 1:3)cat("yippee!\n")10})x^2 #- yippeex^2 #- simple numbere <- (function(x, y = 1, z) environment())(1+2, "y", {cat(" HO! "); pi+2})(le <- as.list(e)) # evaluates the promises}\keyword{programming}\keyword{data}