Thanks John for the reply and explanation. I sometimes use validObject interactively, and in those circumstances it might be nice to be able to require recursive validity checking, e.g., with an optional argument.
Martin John Chambers <[EMAIL PROTECTED]> writes: > The problem is over-ambitious documentation. Recursively running > the checks on slots for all validObject calls would be a fairly > serious efficiency hit. Objects are checked for validity when > created, other than as the default object, so assuming the slot > objects to be as claimed is reasonable if they haven't been > corrupted later on. We'll update the documentation. > > Validity checking is a tricky business in general. R validates new > objects, but users can turn valid objects into invalid objects in > cases where slots have to match in special ways (you can't apply > validObject each time a slot changes, since the change may be part > of a bigger computation that _will_ produce a valid object). > Similarly, constraints on the elements can't be checked each time an > element or subset of the object changes, if the changes have to be > done in stages. Systems that "commit" top-level assignments can > check then, but R does not have that distinction. > > Martin Morgan wrote: > > 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([EMAIL PROTECTED]) 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 ) [EMAIL PROTECTED] > 0 ) > setClass("bar", > representation( y="foo", z="numeric" ), > validity = function( object ) [EMAIL PROTECTED] > 0 ) > obj <- new( "bar", y = new( "foo", x=1 ), z = 1 ) > > and then... > > > > validObject( obj ) > > > > [1] TRUE > ## invalidate [EMAIL PROTECTED] > > > [EMAIL PROTECTED]@x <- -1 > validObject( [EMAIL PROTECTED] ) # right, this is not valid > > > > Error in validObject([EMAIL PROTECTED]) : invalid class "foo" object: > FALSE > > > ## [EMAIL PROTECTED] 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" > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel