From murdoch.duncan at gmail.com  Mon May  2 16:10:26 2011
From: murdoch.duncan at gmail.com (Duncan Murdoch)
Date: Mon, 02 May 2011 10:10:26 -0400
Subject: [Rd] Using substitute to access the expression related to a
	promise
In-Reply-To: <BANLkTi=PARrZvyvDJsH4x8GDCY7kLHm+=w@mail.gmail.com>
References: <BANLkTi=PARrZvyvDJsH4x8GDCY7kLHm+=w@mail.gmail.com>
Message-ID: <4DBEBB52.7050508@gmail.com>

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
>



[Rd] Using substitute to access the expression related to a promise
Duncan Murdoch