Re: [Rd] Bug or feature: using "ANY" as a generic field class (was: '[R] Is there a (virtual) class that all R objects inherit from?)

From: Janko Thyson <janko.thyson.rstuff_at_googlemail.com>
Date: Mon, 06 Jun 2011 15:28:31 +0200

Thanks a lot for your reply and I'm sorry if I didn't make it quite clear what I expected, but you got it right:

I'd simply like to see the same behavior for Reference Classes as for S4 classes when extending classes with "ANY" fields as featured in the example below.

 > setClass("A", representation(x="ANY")) [1] "A"
 > setClass("B", contains="A", representation(x="character")) [1] "B"
 > new("B", x = "abc")
An object of class "B"
Slot "x":
[1] "abc"

Thanks for addressing this!

Regards,
Janko

On 03.06.2011 19:13, John Chambers wrote:
> Well, your mail is unclear as to what you expected, but there is one
> bug shown by your example.
>
> The behavior of S4 classes is sensible, at least as far as the example
> shows:
>
>
> > setClass("A", representation(x="ANY"))
> [1] "A"
> > setClass("B", contains="A", representation(x="character"))
> [1] "B"
> > new("B", x=1:3)
> Error in validObject(.Object) :
> invalid class "B" object: invalid object for slot "x" in class "B":
> got class "integer", should be or extend class "character"
>
> You couldn't expect the new() call to work, as the error message
> clearly explains. A legitimate call does work:
>
> > new("B", x = "abc")
> An object of class "B"
> Slot "x":
> [1] "abc"
>
> The reference classes should work the same way, but don't, as your
> example shows.
>
> A <- setRefClass(
> + Class="A",
> + fields=list(
> + .PRIMARYDATA="ANY"
> + ),
> + contains=c("VIRTUAL")
> + )
> > B <- setRefClass(
> + Class="B",
> + fields=list(
> + .PRIMARYDATA="character"
> + ),
> + contains=c("A")
> + )
> Error in `insertFields<-`(`*tmp*`, value = "character") :
> The overriding class("character") of field ".PRIMARYDATA" is not a
> subclass of the existing field definition ("ANY")
>
> We'll fix that. And, yes, "ANY" is intended as a universal
> superclass, but is usually not mentioned explicitly.
>
>
> On 6/3/11 6:53 AM, Janko Thyson wrote:
>> Dear list,
>>
>> I was wondering if you could help me out in clarifying something:
>> Is it possible to use class "ANY" in slots/fields of formal classes
>> if you
>> a) do not want to restrict valid classes of that field and
>> b) if you are making explicit use of class inheritance?
>>
>> It seems to work in simple scenarios but produces errors when class
>> inheritance comes into play. So I was wondering if that's a feature or a
>> bug.
>>
>> If using "ANY" is not the right way, I'd appreciate a pointer to how you
>> can to this.
>>
>> See previous post with an example below.
>>
>> Regards,
>> Janko
>>
>> On 06/03/2011 01:53 AM, Janko Thyson wrote:
>>> On 31.05.2011 18:17, Martin Morgan wrote:
>>>> On 05/30/2011 07:02 AM, Janko Thyson wrote:
>>>>> Dear list,
>>>>>
>>>>> I would like to set one specific Reference Class field to be of an
>>>>> arbitrary class. Is there a class that all R objects inherit from? I
>>>>> thought that "ANY" was something like this, but obviously that's not
>>>>> true:
>>>>>
>>>>>> inherits(1:3, "ANY")
>>>>> [1] FALSE
>>>>
>>>> I can't speak to the implementation, but ANY functions as a base class
>>>> in terms of slot / field assignment and inheritance, e.g.,
>>>>
>>>> setClass("A", representation(x="ANY"))
>>>> new("A", x=1:3)
>>>>
>>>> Martin
>>>
>>> Hi Martin,
>>>
>>> sorry for the late response. The way you do it works. Yet, when you
>>> declare dependencies more explicitly (contains=XY), then R
>>> complains. Is
>>> this a feature or a bug (with respect to the "less explicit" way
>>> working
>>> just fine)? See the example below:
>>>
>>> # S4
>>> setClass("A", representation(x="ANY"))
>>> new("A", x=1:3)
>>>
>>> setClass("A", representation(x="ANY"))
>>> setClass("B", contains="A", representation(x="character"))
>>> new("B", x=1:3)
>>>
>>> # Reference Classes
>>> setRefClass(
>>> Class="A",
>>> fields=list(
>>> .PRIMARYDATA="ANY"
>>> ),
>>> contains=c("VIRTUAL")
>>> )
>>> B<- setRefClass(
>>> Class="B",
>>> fields=list(
>>> .PRIMARYDATA="character"
>>> ),
>>> contains=c("A")
>>> )
>>
>> Bug, I'd say. Martin
>>
>>>
>>> Regards,
>>> Janko
>>>>>
>>>>> Regards,
>>>>> Janko
>>>>>
>>>>> [[alternative HTML version deleted]]
>>>>>
>>>>> ______________________________________________
>>>>> R-help_at_r-project.org mailing list
>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>>> PLEASE do read the posting guide
>>>>> http://www.R-project.org/posting-guide.html
>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>
>>>>
>>
>>
>
> ______________________________________________
> R-devel_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Mon 06 Jun 2011 - 13:32:32 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 Mon 06 Jun 2011 - 15:40:16 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive