delayedAssign {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.

This function is meant to replace the `delay()` function, to make it more difficult for R code to see ``naked'' promises.

### 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

[Package base version 2.3.1 Index]