[R] Check the class of an object
Simon Zehnder
szehnder at uni-bonn.de
Tue Jul 23 20:51:12 CEST 2013
Hi Martin,
I didn't know that. But that is even more comfortable for checking. Thanks for the quick update!
Best
Simon
P.S. And thanks for the online documents about S4 - I could already learn a lot!
On Jul 23, 2013, at 7:11 PM, Martin Morgan <mtmorgan at fhcrc.org> wrote:
> 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.
>
> you said you were you were using S4 classes. S4 classes do not report vectors of length != 1, from ?class
>
> For objects which have a formal class, its name is returned by 'class'
> as a character vector of length one
>
> so a first unit test could be
>
> stopifnot(length(class(myObject)) != 1L)
>
>
>>
>> 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.
>>
>
>
> --
> Computational Biology / Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N.
> PO Box 19024 Seattle, WA 98109
>
> Location: Arnold Building M1 B861
> Phone: (206) 667-2793
More information about the R-help
mailing list