From vitosmail at rambler.ru  Mon Aug 17 20:06:44 2009
From: vitosmail at rambler.ru (Vitalie S.)
Date: Mon, 17 Aug 2009 20:06:44 +0200
Subject: [Rd] S4: inheritance of validity methods?
Message-ID: <op.uyti9if2dacko8@tir-070312.staff.few.eur.nl>

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?

Many thanks,
Vitalie.

--



[Rd] S4: inheritance of validity methods?
Vitalie S.