From mtmorgan at fhcrc.org  Mon Mar  6 17:57:41 2006
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Mon, 06 Mar 2006 08:57:41 -0800
Subject: [Rd] validObject does not check validity of slots
Message-ID: <6phk6b7zf22.fsf@gopher3.fhcrc.org>

The documentation for validObject suggests that slots are checked for
validity, but validObject seems only to check that the slot has
something claiming to be correct; validObject(obj) does not perform
the equivalent of validObject(obj at y) for slot y.

This is also the second problem issue reported in

http://tolstoy.newcastle.edu.au/R/devel/05/03/0151.html

Relevant documentation, an example, and sessionInfo follow.

Martin

validObject             package:methods             R Documentation

Arguments:
     ...
     Note that validity methods do not have to check validity of any
     slots or superclasses:  the logic of 'validObject' ensures these
     tests are done once only.
     ...
Details:

     Validity testing takes place "bottom up":  first the validity of
     the object's slots, if any, is tested.  
     ...

setClass("foo",
         representation( x="numeric" ),
         validity = function( object ) object at x > 0 )
setClass("bar",
         representation( y="foo", z="numeric" ),
         validity = function( object ) object at z > 0 )
obj <- new( "bar", y = new( "foo", x=1 ), z = 1 )

and then...

> validObject( obj )
[1] TRUE
## invalidate obj at y
> obj at y@x <- -1
> validObject( obj at y )                  # right, this is not valid
Error in validObject(obj at y) : invalid class "foo" object: FALSE
> ## obj at y is invalid, but obj is valid?
> validObject( obj )                    # should be invalid?
[1] TRUE



> sessionInfo()
Version 2.3.0 Under development (unstable) (2006-03-03 r37471) 
x86_64-unknown-linux-gnu 

attached base packages:
[1] "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets" 
[7] "base"



[Rd] validObject does not check validity of slots
Martin Morgan