Giles Heywood
2005-Jan-07 12:28 UTC
[R] S4 class no longer accepts matrix in array slot under 2.0.1
I have an S4 class with a slot of class "array", 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. 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. I conclude that in this context the methods package does not recognise "matrix" as a subclass of "array". However if I use getClass(), I see that R recognises "matrix" as a subclass of "array" (and vice-versa). So is this new behaviour correct? [this is a simplified (and final) reposting of an earlier question entitled "matrix no longer "is" array in 2.0.1?"]
Witold Eryk Wolski
2005-Jan-07 13:46 UTC
[R] S4 class no longer accepts matrix in array slot under 2.0.1
Giles Heywood wrote:>I have an S4 class with a slot of class "array", 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. > >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. > >I conclude that in this context the methods package does not recognise >"matrix" as a subclass of "array". However if I use getClass(), I see that R >recognises "matrix" as a subclass of "array" (and vice-versa). So is this >new behaviour correct? > >[this is a simplified (and final) reposting of an earlier question entitled >"matrix no longer "is" array in 2.0.1?"] > > >Hi, > setClass("foo",representation("matrix")) [1] "foo" > a <- new("foo",array(NA,2:4)) > b <- new("foo",matrix(NA,2,3)) > Will work. As you say array has a subclass matrix. getClass("array") .... Known Subclasses: "matrix" and getClass("matrix") Known Subclasses: Class "array", directly, with explicit test and coerce and matrix has a subclass array. What probably is necessary to use polymorphism -> assigning a subclass to the parent class is the "explicit test and coearce". It seems that matrix is the superclass of array. /E>______________________________________________ >R-help at 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 > > >-- Dipl. bio-chem. Witold Eryk Wolski MPI-Moleculare Genetic Ihnestrasse 63-73 14195 Berlin tel: 0049-30-83875219 __("< _ http://www.molgen.mpg.de/~wolski \__/ 'v' http://r4proteomics.sourceforge.net || / \ mail: witek96 at users.sourceforge.net ^^ m m wolski at molgen.mpg.de