Rev 66536 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
setClass("A", representation(a="numeric"))a1 <- new("A", a=1.5)m1 <- as.matrix(1)setClass("M", contains = "matrix", representation(fuzz = "numeric"))set.seed(113)f1 <- runif(3)stopifnot(identical(as(new("M", 1:12, nrow = 3, fuzz = f1), "matrix"),matrix(1:12, nrow=3)),identical(as(new("M", 1:12, 3, fuzz = f1), "matrix"),matrix(1:12, 3)),identical(as(new("M", 1:12, ncol = 3, fuzz = f1), "matrix"),matrix(1:12, ncol=3)))setClass("B", contains = c("matrix", "A"))stopifnot(## a new "B" element mixing two superclass objectsidentical(new("B", m1, a1)@a, a1@a),## or notidentical(as(new("B", m1),"matrix"), m1),## or supplying a slot to overrideidentical(new("B", matrix(m1, nrow = 2), a1, a=pi)@a, pi))## an extra level of inheritancesetClass("C", contains = "B", representation(c = "character"))new("C", m1, c = "Testing")## verify that validity tests work (PR#14284)setValidity("B", function(object) {if(all(is.na(object@a) | (object@a > 0)))TRUEelse"elements of slot \"a\" must be positive"})a2 <- new("A", a= c(NA,3, -1, 2))## from the SoDA package on CRANmuststop <- function(expr, silent = TRUE) {tryExpr <- substitute(tryCatch(expr, error=function(cond)cond))value <- eval.parent(tryExpr)if(inherits(value, "error")) {if(!silent)message("muststop reports: ", value)invisible(value)}elsestop(gettextf("The expression %s should have thrown an error, but instead returned an object of class \"%s\"",deparse(substitute(expr))[[1]], class(value)))}muststop(new("B", m1, a2))removeClass("B")removeClass("C")removeClass("M")## TODO: make versions of above inheriting from "array" and "ts"removeClass("A")## removeClass() for a union where "matrix"/"array" is part:setClassUnion("mn", c("matrix","numeric")); removeClass("mn")# gave "node stack overflow",setClassUnion("an", c("array", "integer")); removeClass("an")# (ditto)setClassUnion("AM", c("array", "matrix")); removeClass("AM")# (ditto)## as had "matrix" -> "array" -> "matrix" ... recursion## and we want this to *still* work:stopifnot(is(tryCatch(as(a3 <- array(1:24, 2:4), "matrix"), error=function(e)e),"error"),is(as(a2 <- array(1:12, 3:4), "matrix"),"matrix"),is(a2, "matrix"), is(a2, "array"), is(a3, "array"), !is(a3, "matrix"),## and yes, "for now":identical(a2, matrix(1:12, 3)))## subclassing a class that did not allow new() w/o extra args failed## through version 3.1.1setClass("BAR", slots = c(y="integer"))setMethod("initialize", "BAR", function(.Object, Y) {.Object@y <- Y; .Object})setClass("BAR3", contains = "BAR")