On 02/05/2011 9:53 AM, Hadley Wickham wrote:
Hi all,
The help for delayedAssign suggests that you can use substitute to
access the expression associated with a promise, and the help for
substitute says: "If it is a promise object, i.e., a formal argument
to a function or explicitly created using ?delayedAssign()?, the
expression slot of the promise replaces the symbol.
But this doesn't seem to work:
?a<- 1
?b<- 2
?delayedAssign("x", {message("assigning..."); a + b})
?substitute(x)
[1] 3
Is this a bug in substitute?
I think it is a design flaw rather than a bug: ?the global environment is
handled specially. ?If you put those lines into a function you'll see
different behaviour. ?I think if you really carefully read the documentation
you'll find it says this.
I suggested regularizing this several years ago, but there were worries that
it would break some common usage.
Duncan Murdoch