Sirs:

My validity function did not run when my class contains="matrix". But if I
first define the class with contains="numeric", then define it again
with contains="matrix", validity runs. Here's the session:

> f <- function(object) "BAD CLASS" # force error to
> setClass("A", contains="matrix", validity=f)
[1] "A"
> new("A",as.matrix(1)) # should generate a validity error, does not
An object of class “A”
     [,1]
[1,]    1
> setClass("B", contains="numeric", validity=f)
[1] "B"
> new("B",1) # generates the error
Error in validObject(.Object) : invalid class "B" object: BAD CLASS
> setClass("B", contains="matrix", validity=f)
[1] "B"
> new("B",as.matrix(1)) # generates the error
Error in validObject(.Object) : invalid class "B" object: BAD CLASS

On the other hand, when I define the class with "matrix" in its
representation, validity is called, no work-around necessary:

> setClass("C", representation(a="matrix"), validity=f)
[1] "C"
> new("C",a=as.matrix(1)) # error, as desired
Error in validObject(.Object) : invalid class "C" object: BAD CLASS

Should I
1) always put "matrix" into the setClass representation argument instead of
the contains argument, or
2) use contains="numeric", put the matrix's dims and dimnames attributes
into slots, and rely on a constructor to populate the instance?

Option 2 seems most "stable".

Thanks,
Dan Murphy

Windows Vista, R version 2.11.0 (2010-04-22)

	[[alternative HTML version deleted]]

