Skip to content

symbol name caching bug: attributes get tied to symbol names

4 messages · William Dunlap, Luke Tierney, John Chambers

#
In R versions 2.10.1 and "2.11.0 Under development
(unstable) (2010-03-07 r51225)" on Windows I get the
following if I type the commands at the start of
the session.  Note how the attribute attached to
the name "Response" by the initial call to structure()
seems to get tied to that name for the remainder of
the session:

   > z <- structure(quote(Response), isResponse=TRUE)
   > parse(text="Response~Predictor")[[1]][[2]]
   Response
   attr(,"isResponse")
   [1] TRUE
   > quote(Response~Predictor)[[2]]
   Response
   attr(,"isResponse")
   [1] TRUE
   > quote(Response)
   Response
   attr(,"isResponse")
   [1] TRUE

The attribute actually does go away after quite a
while, but I haven't figured out the trigger.
rm(z) followed by gc() does not affect it.

If I use an unadorned variable called Response before
making the structure z, then the isResponse attribute
doesn't seem to stick to the name Response.


Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
#
Since symbols/names are reference objects this behavior in unavoidable
if we allow attributes to be added to them.  On the other hand, I'm
not sure it makes sense to allow that. Attempting to set an attribute
on NULL signals an error; it would probably make sense to do the same
for any name object.

luke
On Fri, 12 Mar 2010, William Dunlap wrote:

            

  
    
#
Thanks Luke, for the explanation.

I'm comfortable disallowing attributes on names.

The problem arose for me when analyzing a parse
tree and I was using attributes to label parts of it.
I can stick in a list() layer above the calls, names,
etc., to attach the attributes to.  That can simplify
the syntax also, since things like as.vector() applied
to a call object with attributes won't strip the attributes.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
1 day later