[Bioc-devel] S4 validity checking {was "eset.Rnw revised in Biobase"}

Martin Maechler maechler at stat.math.ethz.ch
Tue Sep 6 09:56:23 CEST 2005

>>>>> "Kasper" == Kasper Daniel Hansen <khansen at stat.berkeley.edu>
>>>>>     on Mon, 5 Sep 2005 15:45:30 -0700 writes:


    Kasper> 7) So the assayData slot does not have a specific
    Kasper> number/names for its components. I see the need for
    Kasper> this. But let us say I want to use it for a specific
    Kasper> case where I have two assays (let us say a two-
    Kasper> color micro array experiment). Do you imagine that
    Kasper> people will create more specific versions of the
    Kasper> class by something like (code not tested)

(yes, it was missing 3 closing ")" 
  --- quickly seen when using Emacs with "paren match" activated)

    >>    setClass("twoclor", representation("eSet"),
    >>       validity = function(object){
    >>          if(!validObject(as(object, "eSet")))
    >>             return(FALSE)  ## this might be unnecessary
    >>          if(sort(names(assayData(object)) != c("green", "red")))
    >>             return(FALSE)
    >>          else
    >>            return(TRUE)
    >>        })

I want to comment on the above code, since
I think I've seen the same mistake several times in people's code:

Validity checking should  **NOT** return TRUE or FALSE,
but  TRUE or <reason for non-validity> .
This has been in `The Green Book' but also the very first entry in
or ?validObject :

>> Description:
>>      The validity of 'object' related to its class definition is
>>      tested.  If the object is valid, 'TRUE' is returned; otherwise,
>>      either a vector of strings describing validity failures is
>>      returned, or an error is generated (according to whether 'test' is
>>      'TRUE').
>>      The function 'setValidity' sets the validity method of a class
>>      (but more normally, this method will be supplied as the 'validity'
>>      argument to 'setClass').  The method should be a function of one
>>      object that returns 'TRUE' or a description of the non-validity.


More information about the Bioc-devel mailing list