What's the proposal here?  To eliminate "double" as a class?  No 
objection from this corner.  As I remember, it was put in early in the 
implementation of methods, when I was confused about what R intended in 
this area (well, I'm not totally unconfused even now).

If this is the proposal, we could implement it in r-devel and see if 
there are complaints.

Prof Brian Ripley wrote:
> On Tue, 13 Nov 2007, Simon Urbanek wrote:
>
>   
>> On Nov 13, 2007, at 3:36 AM, [EMAIL PROTECTED] wrote:
>>
>>     
>>> Any idea why S4 doesn't allow slots of type "double"?
>>>
>>>       
>> Type (as in storage type and "double" is a storage type) has nothing
>> to do with classes. You cannot create slots for types, only for classes.
>>     
>
> Unfortunately not in the world of the 'methods' package (which seems to 
> differ here from the Green Book and S-PLUS).  There's a basic class 
> "double" (and also "single") defined in BasicClasses.R.  It say:
>
>   
>> getClass("double")
>>     
>
> No Slots, prototype of class "numeric"
>
> Extends: "vector", "numeric"
>
>   
>> getClass("numeric")
>>     
>
> No Slots, prototype of class "numeric"
>
> Extends: "vector"
>
> Known Subclasses: "double", "integer"
>
> So it is an otherwise unspecified subclass of "numeric".
>
> Now when you do
>
>   
>> a <- new("numeric", pi)
>> a
>>     
> [1] 3.141593
>   
>> class(a)
>>     
> [1] "numeric"
>
> you are in fact calling class() on a REALSXP, and that is set up to report 
> "numeric" (the implicit class comes from mode not type, except for 
> "integer").
>
> Anther area of confusion is that as.numeric, as.double and as.real are 
> three names for the same thing, but is.numeric and is.double are not the 
> same.  So we end up with
>
>   
>> x <- 1:3
>> is.numeric(x)
>>     
> [1] TRUE
>   
>> identical(x, as.numeric(x))
>>     
> [1] FALSE
>   
>> x <- pi
>> is.numeric(x)
>>     
> [1] TRUE
>   
>> identical(x, as.numeric(x))
>>     
> [1] TRUE
>
> Basically I think class() is wrong (it should use "double"), but it was 
> not my choice and it was presumably done to agree with the Green Book.
>
> I agree that it would be best to remove the "double" and "single" S4 
> classes.  At least in the version of S-PLUS I have left, "double" does not 
> exist -- "single" does but is a distinct storage type.
>
>
>   
>>     
>>>> setClass("A", representation(a="double"))
>>>>         
>>>  Error in makePrototypeFromClassDef(properties, ClassDef, immediate,
>>> where) :
>>>    in making the prototype for class "A" elements of the prototype
>>> failed to
>>> match the corresponding slot class: a (class ?double? )
>>>
>>> "numeric", "integer", "character", "complex", "raw", etc... they all
>>> work but "double" doesn't. Any reason for this strange exception?
>>>
>>>       
>> AFAICS there is no way to create an object of the class "double" (save
>> for 'faking' it by creating an informal S3 object), so such definition
>> is useless. And given this fact, even the internal code is unable to
>> create it, so it doesn't match the signature. Note:
>>
>>     
>>> a=new("double")
>>> class(a)
>>>       
>> [1] "numeric"
>>     
>>> is(a,"double")
>>>       
>> [1] FALSE
>>
>> I think it comes from the fact that there is an S4 definition for the
>> class "double" which is not valid. That is probably a bug and the
>> class definition should be removed.
>>
>> Cheers,
>> Simon
>>
>> ______________________________________________
>> 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