Re: [Rd] delayedAssign changing values

From: ghostwheel <>
Date: Thu, 26 Apr 2012 15:10:34 -0700 (PDT)

Simon Urbanek wrote

>> More intuitive would have been the behavior
>> delayedAssign("x", local({y <- 7; y+3}) ) 
>> which only changes x.

> That is questionable - I think it is more logical for both environments to
> be the same as default. Just think if it -- the point here is to access
> lazy evaluation which is exactly what it does - lazy evaluation takes
> place in the original environment, not in another one.

I think I finally understand. My intuition just came from looking at ?delayedAssign.
But delayedAssign came to replace delay(), which "creates a promise to evaluate the given expression".
When one thinks of delay(), what you said makes sense, you just delay executing a certain expression in the parent frame.

I think, though, that with the current way it is described and called, delayedAssign should by default only have the side effect of changing the variable, i.e. use eval.env=new.env().

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

I think that is a nice clear side effect - changing a variable when it is a delayed "<<-".
Otherwise it seems to me that delayedAssign could cause debugging nightmares. Luckily, it currently doesn't seem to widely used to cause them....

But you are right that it might be a bit strange that assign.env and eval.env are different. Maybe that is why there are two different parameters - to make the side effects clearer?
I tried to find anywhere uses of delayedAssign which make positive use of side effects other than the assignment, and couldn't find any. Does anyone know of such a use?

P.S. the end of ?delayedAssign contains this cryptic code:

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

Which I think is another way to create a promise, other than delayedAssign. But it is really unclear why it sits there at the bottom of the document. There should probably be more explanation of what this is....

View this message in context:
Sent from the R devel mailing list archive at

______________________________________________ mailing list
Received on Thu 26 Apr 2012 - 22:13:07 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 27 Apr 2012 - 11:30:50 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive