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



--
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

______________________________________________
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