[R] Check the class of an object

Hervé Pagès hpages at fhcrc.org
Tue Jul 23 19:20:12 CEST 2013


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 <dwinsemius at 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 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.
>

-- 
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: hpages at fhcrc.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319



More information about the R-help mailing list