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)
x
>  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

>  sessionInfo()
R version 2.13.0 (2011-04-13)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
...

Hadley


______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to