delayedAssign              package:base              R Documentation

Delay Evaluation

Description:

     'delayedAssign' creates a _promise_ to evaluate the given
     expression if its value is requested.  This provides direct access
      to the _lazy evaluation_ mechanism used by R for the evaluation 
     of (interpreted) functions.

Usage:

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

Arguments:

       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'

Details:

     Both 'eval.env' and 'assign.env' default to the currently active
     environment.

     The expression assigned to a promise by 'delayedAssign' will not
     be evaluated until it is eventually 'forced'.  This happens when
     the variable is first accessed.

     When the promise is eventually forced, it is evaluated within the
     environment specified by 'eval.env' (whose contents may have
     changed in the meantime).  After that, the value is fixed and the
     expression will not be evaluated again.

Value:

     This function is invoked for its side effect, which is assigning a
     promise to evaluate 'value' to the variable 'x'.

See Also:

     'substitute', to see the expression associated with a promise.

Examples:

     msg <- "old"
     delayedAssign("x", msg)
     msg <- "new!"
     x #- new!
     substitute(x) #- msg

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

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

     e <- (function(x, y = 1, z) environment())(1+2, "y", {cat(" HO! "); pi+2})
     (le <- as.list(e)) # evaluates the promises

