Hi Hervé,

thank you very much for your reply! This makes the different treatment of S3 
and S4 objects by 'class' clear.

Best

Simon


On Jul 23, 2013, at 7:20 PM, Hervé Pagès <hpa...@fhcrc.org> wrote:

> Hi,
> 
> On 07/23/2013 09:59 AM, Simon Zehnder wrote:
>> Hi David,
>> 
>> thanks for the reply. You are right. Using the %in% is more stable and I 
>> gonna change my code.
> 
> Unlike with S3 objects, class() on an S4 object can only return 1 class.
> 
> Also note that, on an S3 object, doing
> 
>  "firstClass" %in% class(myObject)
> 
> is equivalent to doing inherits(myObject, "firstClass"), which is
> what you said you wanted to avoid. The most specific class should be
> the first so if that's what you wanted to check, you could do
> 
>  class(myObject)[1] == "firstClass"
> 
> But that precaution is not needed if 'myObject' is guaranteed to be
> an S4 object (although when writing a unit test, one should probably
> discard any guarantee of that sort).
> 
> Cheers,
> H.
> 
> 
>> 
>> When testing for a specific class using 'is' one has to start at the lowest 
>> heir and walk up the inheritance structure. Starting at the checks at the 
>> root will always give TRUE. Having a structure which is quite complicated 
>> let me move to the check I suggested in my first mail.
>> 
>> Best
>> 
>> Simon
>> 
>> On Jul 23, 2013, at 6:15 PM, David Winsemius <dwinsem...@comcast.net> wrote:
>> 
>>> 
>>> On Jul 23, 2013, at 5:36 AM, Simon Zehnder wrote:
>>> 
>>>> Dear R-Users and R-Devels,
>>>> 
>>>> I have large project based on S4 classes. While writing my unit tests I 
>>>> found out, that 'is' cannot test for a specific class, as also inherited 
>>>> classes can be treated as their super classes. I need to do checks for 
>>>> specific classes. What I do right now is sth. like
>>>> 
>>>> if (class(myClass) == "firstClass") {
>>> 
>>> I would think that you would need to use `%in%` instead.
>>> 
>>> if( "firstClass" %in% class(myObject) ){
>>> 
>>> Objects can have more than one class, so testing with "==" would fail in 
>>> those instances.
>>> 
>>> 
>>>> 
>>>> } else if (class(myClass) == "secondClass") {
>>>> 
>>>> }
>>>> 
>>>> Is this the usual way how classes are checked in R?
>>> 
>>> Well, `inherits` IS the usual way.
>>> 
>>>> I was expecting some specific method (and 'inherits' or 'extends' is not 
>>>> what I look for)...
>>>> 
>>>> 
>>>> Best
>>>> 
>>>> Simon
>>>> 
>>>>    [[alternative HTML version deleted]]
>>> 
>>> Plain-text format is the recommended format for Rhelp
>>> 
>>> --
>>> David Winsemius
>>> Alameda, CA, USA
>>> 
>> 
>> ______________________________________________
>> R-help@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.
>> 
> 
> -- 
> Hervé Pagès
> 
> Program in Computational Biology
> Division of Public Health Sciences
> Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N, M1-B514
> P.O. Box 19024
> Seattle, WA 98109-1024
> 
> E-mail: hpa...@fhcrc.org
> Phone:  (206) 667-5791
> Fax:    (206) 667-1319

______________________________________________
R-help@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.

Reply via email to