[Rd] S4: inheritance of validity methods?

Martin Morgan mtmorgan at fhcrc.org
Tue Aug 18 15:42:48 CEST 2009

"Vitalie S." <vitosmail at rambler.ru> writes:

> Dear Developers,
> In current implementation of validity method, objects are first
> coerced to  superclass (slots are striped). Thus, it is not possible
> to write validity  method which would perform some checks on children
> slots.
> Say, I want to check if number of slots in a class is equal to "n":
> setClass("A", representation(a="numeric", n="integer"),
>           prototype=list(a=12, n=1L),
>           validity=function(object){
>               if(length(slotNames(object))!=object at n+1) paste("Number
>               of  slots must be ", object at n)
>               else TRUE
>           })
> setClass("B", representation(b="numeric"), contains="A",
>           prototype=list(a=12, b=14, n=2L))
> new("B", a=11, b=33)
> Error in validObject(.Object) :
>    invalid class "B" object: Number of slots must be  2
> Error, because an object of class "A" is passed to validObject with
> one  slot "b" removed and n=2.
> Is were a work around for this, or I am just doomed to write the same
> validity method for each children class?

I think you're doomed, but checking the number of slots in an instance
seems like a very unusual validity method -- isn't this the job of the
methods package, not your implementation of particular classes?


> Many thanks,
> Vitalie.

Martin Morgan
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-devel mailing list