Hello all, In one of the packages (phylobase) I'm contributing to, we define a class as follows: setClass("phylo4", representation(edge = "matrix", edge.length = "numeric", label = "character", edge.label = "character", order = "character", annote = "list"), prototype = list( edge = matrix(nrow = 0, ncol = 2, dimname = list(NULL, c("ancestor", "descendant"))), edge.length = numeric(0), label = character(0), edge.label = character(0), order = "unknown", annote = list() ), validity = checkPhylo4) Using today's SVN checkout (r61643), building an object of the class 'phylo4' like this: phylo4(foo, annote="bar") doesn't return an error as it used to (given that annote is not a list). What is now the preferred way of checking that annote is a actually a list? Thanks, -- François [[alternative HTML version deleted]]
Thanks. No need for a complicated example actually:> C1 <- setClass("C1", slots = c(x = "numeric")) > c1 <- C1() > c1 at x <- "Hello" > validObject(c1)Error in validObject(c1) : invalid class "C1" object: invalid object for slot "x" in class "C1": got class "character", should be or extend class "numeric" In making @<- substantially more efficient in r-devel, we lost some error checking. That's too efficient. This will be fixed, but given that code has migrated from an R function to C and that I'm not currently at home, it may take a little while. John On Jan 13, 2013, at 3:34 PM, Fran?ois Michonneau wrote:> Hello all, > > In one of the packages (phylobase) I'm contributing to, we define a class > as follows: > > setClass("phylo4", > representation(edge = "matrix", > edge.length = "numeric", > label = "character", > edge.label = "character", > order = "character", > annote = "list"), > prototype = list( > edge = matrix(nrow = 0, ncol = 2, > dimname = list(NULL, c("ancestor", > "descendant"))), > edge.length = numeric(0), > label = character(0), > edge.label = character(0), > order = "unknown", > annote = list() > ), > validity = checkPhylo4) > > Using today's SVN checkout (r61643), building an object of the class > 'phylo4' like this: > > phylo4(foo, annote="bar") > > doesn't return an error as it used to (given that annote is not a list). > > What is now the preferred way of checking that annote is a actually a > list? > > Thanks, > -- Fran?ois > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
>>>>> Fran?ois Michonneau <francois.michonneau at gmail.com> >>>>> on Sun, 13 Jan 2013 18:34:36 -0500 writes:> Hello all, > In one of the packages (phylobase) I'm contributing to, we define a class > as follows:> setClass("phylo4", > representation(edge = "matrix", > edge.length = "numeric", > label = "character", > edge.label = "character", > order = "character", > annote = "list"), > prototype = list( > edge = matrix(nrow = 0, ncol = 2, > dimname = list(NULL, c("ancestor", > "descendant"))), > edge.length = numeric(0), > label = character(0), > edge.label = character(0), > order = "unknown", > annote = list() > ), > validity = checkPhylo4)> Using today's SVN checkout (r61643), building an object of the class > 'phylo4' like this:> phylo4(foo, annote="bar")> doesn't return an error as it used to (given that annote is not a list).Well, the above is not reproducible {foo and checkPhylo4 are missing !}. If I make it reproducible, it does work, i.e., give an error for me (rev 61644): phylo4 <- setClass("phylo4", representation(edge = "matrix", edge.length = "numeric", label = "character", edge.label = "character", order = "character", annote = "list"), prototype = list(edge = matrix(nrow = 0, ncol = 2, dimnames = list(NULL, c("ancestor", "descendant"))), edge.length = numeric(0), label = character(0), edge.label = character(0), order = "unknown", annote = list() ) )## ), ## validity = checkPhylo4) foo <- phylo4() phylo4(foo, annote="bar") ----------- Gives Error in validObject(.Object) : invalid class "phylo4" object: invalid object for slot "annote" in class "phylo4": got class "character", should be or extend class "list" as it should. Can you try providing a simple reproducible example?> What is now the preferred way of checking that annote is a actually a > list?> Thanks, > -- Fran?ois> [[alternative HTML version deleted]]