I have an S4 class which extends array and has other slots, and in upgrading to 2.0.1 (from 1.9.1) I have encountered a change in behaviour. This causes me some difficulties if I want to allow 2-dimensional arrays in the slot (which I do).
The following (in 2.0.1) illustrates the point: > setClass("foo",representation("array")) [1] "foo" > a <- new("foo",array(NA,2:4)) > b <- new("foo",matrix(NA,2,3)) Error in "as<-"(`*tmp*`, Classi, value = c(NA, NA, NA, NA, NA, NA)) : No method or default for as() replacement of "foo" with Class="matrix" This last error did not occur under 1.9.1. This becomes a practical consideration in an extract method: > setMethod("[", c("foo"), function(x, i, j, ..., drop) + { + if(missing(i)) {i <- min(1,nrow(x)):nrow(x)} + if(missing(j)) {j <- min(1,ncol(x)):ncol(x)} + if(missing(drop)) {drop <- TRUE} + subx <- [EMAIL PROTECTED], j, ..., drop = drop] + new("foo",subx) + }) [1] "[" > a[,,1] Error in "as<-"(`*tmp*`, Classi, value = c(NA, NA, NA, NA, NA, NA)) : No method or default for as() replacement of "foo" with Class="matrix" This is changed behaviour from 1.9.1, for the reason above. I can try to assign the matrix an array class, but the 2-dimensional object has a special status, viz: > class(as(1,"array")) [1] "array" > dim(as(1,"array")) [1] 1 but: > class(as(matrix(1,1,1),"array")) [1] "matrix" I have checked using extends(), and matrix and array still extend one another (hence there is a trivial but unhelpful answer to the title of this posting). getClass() shows some differences, but I am not sure whether they are related to this issue: 1.9.1 >getClass("matrix") No Slots, prototype of class "matrix" Extends: "structure", "array" Known Subclasses: Class "array", directly, with explicit test and coerce 2.0.1 >getClass("matrix") No Slots, prototype of class "matrix" Extends: Class "structure", directly Class "array", directly Class "vector", by class "structure", with explicit coerce Class "vector", by class "array", with explicit coerce Known Subclasses: Class "array", directly, with explicit test and coerce My question is: how can I get a 2-dimensional object into the slot in my S4 class, or into the class "foo" in the minimal example above? [OS = Windows XP] ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html