[Rd] symbol name caching bug: attributes get tied to symbol names

William Dunlap wdunlap at tibco.com
Sat Mar 13 01:33:01 CET 2010


> -----Original Message-----
> From: luke at stat.uiowa.edu [mailto:luke at stat.uiowa.edu] 
> Sent: Friday, March 12, 2010 4:24 PM
> To: William Dunlap
> Cc: r-devel at r-project.org
> Subject: Re: [Rd] symbol name caching bug: attributes get 
> tied to symbol names
> 
> 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.
> 

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 

> luke
> 
> On Fri, 12 Mar 2010, William Dunlap wrote:
> 
> > 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
> >
> > ______________________________________________
> > R-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> >
> 
> -- 
> Luke Tierney
> Chair, Statistics and Actuarial Science
> Ralph E. Wareham Professor of Mathematical Sciences
> University of Iowa                  Phone:             319-335-3386
> Department of Statistics and        Fax:               319-335-3017
>     Actuarial Science
> 241 Schaeffer Hall                  email:      luke at stat.uiowa.edu
> Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu
> 



More information about the R-devel mailing list