Re: [Rd] Bug or feature: using "ANY" as a generic field class

From: Janko Thyson <janko.thyson.rstuff_at_googlemail.com>
Date: Mon, 06 Jun 2011 18:35:52 +0200

Wow, that was fast! Thanks a lot!

Regards,
Janko

On 06.06.2011 18:29, John Chambers wrote:
> Should now behave as expected in r-devel and 2.13 patched, as of SVN
> 56045, June 4. (noted in the NEWS file.)
>
>
> On 6/6/11 6:27 AM, Janko Thyson wrote:
>> 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
>>>
>>
>>
>> --
>> ------------------------------------------------------------------------
>>
>> *Janko Thyson*
>> janko.thyson_at_ku-eichstaett.de <mailto:janko.thyson_at_ku-eichstaett.de>
>>
>> Catholic University of Eichstätt-Ingolstadt
>> Ingolstadt School of Management
>> Statistics and Quantitative Methods
>> Auf der Schanz 49
>> D-85049 Ingolstadt
>>
>> www.wfi.edu/lsqm <http://www.wfi.edu/lsqm>
>>
>> Fon: +49 841 937-1923
>> Fax: +49 841 937-1965
>>
>> This e-mail and any attachment is for authorized use by the intended
>> recipient(s) only. It may contain proprietary material, confidential
>> information and/or be subject to legal privilege. It should not be
>> copied, disclosed to, retained or used by any other party.
>> If you are not an intended recipient then please promptly delete this
>> e-mail and any attachment and all copies and inform the sender.
>>

-- 
------------------------------------------------------------------------

*Janko Thyson*
janko.thyson_at_googlemail.com <mailto:janko.thyson_at_googlemail.com>

Jesuitenstraße 3
D-85049 Ingolstadt

Mobile: +49 (0)176 83294257

This e-mail and any attachment is for authorized use by the intended
recipient(s) only. It may contain proprietary material, confidential
information and/or be subject to legal privilege. It should not be
copied, disclosed to, retained or used by any other party.
If you are not an intended recipient then please promptly delete this
e-mail and any attachment and all copies and inform the sender.


	[[alternative HTML version deleted]]



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

Received on Mon 06 Jun 2011 - 16:39:34 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 - 17:10: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