Just to note, S4 classes can be defined to extend symbols (class "name") 
and other reference types.  These work by using a hidden slot for the 
reference object, just to avoid attaching attributes to the reference.  
(Discussed briefly in the section on Basic Classes in ?Classes.)

John

William Dunlap wrote:
>> -----Original Message-----
>> From: l...@stat.uiowa.edu [mailto:l...@stat.uiowa.edu] 
>> Sent: Friday, March 12, 2010 4:24 PM
>> To: William Dunlap
>> Cc: r-devel@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@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:      l...@stat.uiowa.edu
>> Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu
>>
>>     
>
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>   

        [[alternative HTML version deleted]]

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

Reply via email to