>>>>> Daniel Murphy <chiefmur...@gmail.com> >>>>> on Wed, 5 May 2010 22:08:06 -0700 writes:
> 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 The above behavior is clearly a bug. The correct behavior *should* indeed show a validity error even for class "A" above. You are welcome to submit a formal bug report .. > On the other hand, when I define the class with "matrix" in its > representation, validity is called, no work-around necessary: Yes, but that's really something different, and I can imagine situations, where the "contains" is very preferable, as you get all the methods for "matrix" for free. >> 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? Well, one can go the very long and "stable" way as we did in the Matrix package... I'm not sure I would recommend that for you in your situation. ... not the least because you *could* use the Matrix package if you want to use such formal matrices with its thousands of methods. Martin Maechler, ETH Zurich > Option 2 seems most "stable". > Thanks, > Dan Murphy > Windows Vista, R version 2.11.0 (2010-04-22) > [[alternative HTML version deleted]] > ______________________________________________ > 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