Roger Koenker wrote: > > I would like to add a class to the SparseM package. I have a class "matrix.csr" > that describes a matrix in compressed sparse row format, now I would like a class > matrix.diag.csr that describes such objects when they happen to be diagonal. > The idea is that matrix.diag.csr objects should behave (later in life) exactly like > matrix.csr objects, the distinction is only needed in order to clarify the > situation when they are created. So I have: > > setClass("matrix.diag.csr","matrix.csr") > > My understanding (shakey, as it is) is that if I now try to construct a > matrix.diag.csr > object the checking of it should be just like the checking for a matrix.csr object, > but
Well, hopefully. But there seems a slight problem in the validity method. You require a dimension slot of length 2, but the default object generated from matrix.csr fails that: R> library(SparseM) [1] "SparseM library loaded" R> new("matrix.csr") Error in validObject(.Object) : Invalid "matrix.csr" object: invalid dimension attribute Enter a frame number, or 0 to exit 1:new("matrix.csr") 2:initialize(value, ...) 3:initialize(value, ...) 4:.local(.Object, ...) 5:validObject(.Object) Selection: 5 Browse[1]> [EMAIL PROTECTED] numeric(0) (Your extension of the class uncovered the problem by generating the default object, as the traceback below showed.) John > > > new("matrix.csr",ra=1:3,ja=1:3,ia=1:4,dimension=as.integer(c(3,3))) > An object of class "matrix.csr" > Slot "ra": > [1] 1 2 3 > > Slot "ja": > [1] 1 2 3 > > Slot "ia": > [1] 1 2 3 4 > > Slot "dimension": > [1] 3 3 > > > new("matrix.diag.csr",ra=1:3,ja=1:3,ia=1:4,dimension=as.integer(c(3,3))) > Error in validObject(.Object) : Invalid "matrix.csr" object: invalid dimension > attribute > > the traceback() says: > > 16: stop(paste("Invalid \"", Class, "\" object: ", errors, sep = "")) > 15: validObject(.Object) > 14: .local(.Object, ...) > 13: initialize(value, ...) > 12: initialize(value, ...) > 11: new("matrix.csr") > 10: asMethod(object) > 9: as(object, superClass) > 8: validityMethod(as(object, superClass)) > 7: identical(x, TRUE) > 6: anyStrings(validityMethod(as(object, superClass))) > 5: validObject(.Object) > 4: .local(.Object, ...) > 3: initialize(value, ...) > 2: initialize(value, ...) > 1: new("matrix.diag.csr", ra = 1:3, ja = 1:3, ia = 1:4, dimension = as.integer(c(3, > 3))) > > which might be revelatory to some of you, but leaves me in the dark. Any suggestions > would be greatly appreciated. In case it is relevant > > setClass("matrix.csr",representation(ra="numeric", > ja="integer",ia="integer", dimension="integer"), > validity = function(object) { > if(!length([EMAIL PROTECTED]) == 2 ) > return("invalid dimension attribute") > else{ > nrow <- [EMAIL PROTECTED] > ncol <- [EMAIL PROTECTED] > } > if(!(length([EMAIL PROTECTED]) ==length([EMAIL PROTECTED]))) > return("ra and ja don't have equal lengths") > if(any([EMAIL PROTECTED] < 1) || any([EMAIL PROTECTED] > ncol)) > return("ja exceeds dim bounds") > if(any([EMAIL PROTECTED] < 1)) > return("some elements of ia are <= 0") > if(any(diff([EMAIL PROTECTED])<0)) > return("ia vector not monotone increasing") > if([EMAIL PROTECTED]([EMAIL PROTECTED])] != length([EMAIL > PROTECTED])+1) > return("last element of ia doesn't conform") > if(length([EMAIL PROTECTED]) != nrow+1) > return("ia has wrong number of elments") > if(length([EMAIL PROTECTED]) < 1 || length([EMAIL PROTECTED]) > > nrow*ncol) > return("ra has too few, or too many elements") > TRUE}) > setMethod("initialize", "matrix.csr", > function(.Object, ra = numeric(0), ja = integer(0), > ia = integer(0),dimension = integer(0)) { > [EMAIL PROTECTED] <- ra > [EMAIL PROTECTED] <- ja > [EMAIL PROTECTED] <- ia > [EMAIL PROTECTED] <- dimension > validObject(.Object) > .Object > }) > > url: www.econ.uiuc.edu/~roger/my.html Roger Koenker > email [EMAIL PROTECTED] Department of Economics > vox: 217-333-4558 University of Illinois > fax: 217-244-6678 Champaign, IL 61820 > > ______________________________________________ > [EMAIL PROTECTED] mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-devel -- John M. Chambers [EMAIL PROTECTED] Bell Labs, Lucent Technologies office: (908)582-2681 700 Mountain Avenue, Room 2C-282 fax: (908)582-3340 Murray Hill, NJ 07974 web: http://www.cs.bell-labs.com/~jmc ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-devel