oops, this does not pass R CMD check. I will have to read manuals a bit more.
... * checking S3 generic/method consistency ... WARNING levels: function(x, ...) levels.list: function(x, drop) levels: function(x, ...) levels.data.frame: function(x, drop) ... Anyway, I would like to ask what is the "opinion" about writing methods for classes as list and data.frame. Methods for this might not be as simple as for numeric, character, factor and it would be nice that there would be some guidelines for at least: - what should be the "general" output i.e. list or something else - I understand that it is hard to say in advance, but a common policy might not hurt - what to do if a method for a list or data.frame can not be applied to each entry/column > Hello! > > Does R core find the following pacth usefull - I created methods for > levels for list and data.frame, which can be usefull to get a list of > levels for entries in a list or columns in a data.frame. Patch is > attached and shown bellow example > > # Example >> tmp <- list() >> tmp$a <- factor(letters[1:10]) >> tmp$b <- factor(letters[5:14]) >> tmp$c <- 1:10 >> tmp1 <- as.data.frame(tmp) >> tmp2 <- list() >> tmp2$"1" <- tmp >> tmp2$"2" <- tmp1 >> str(tmp2) > List of 2 > $ 1:List of 3 > ..$ a: Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 > ..$ b: Factor w/ 10 levels "e","f","g","h",..: 1 2 3 4 5 6 7 8 9 10 > ..$ c: int [1:10] 1 2 3 4 5 6 7 8 9 10 > $ 2:`data.frame': 10 obs. of 3 variables: > ..$ a: Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 > ..$ b: Factor w/ 10 levels "e","f","g","h",..: 1 2 3 4 5 6 7 8 9 10 > ..$ c: int [1:10] 1 2 3 4 5 6 7 8 9 10 > >> levels(tmp2) > $"1" > $"1"$a > [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" > > $"1"$b > [1] "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" > > > $"2" > $"2"$a > [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" > > $"2"$b > [1] "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" > >> levels(tmp2, drop = FALSE) > $"1" > $"1"$a > [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" > > $"1"$b > [1] "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" > > $"1"$c > NULL > > > $"2" > $"2"$a > [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" > > $"2"$b > [1] "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" > > $"2"$c > NULL > > ---------------------------------------------------------------------- > > $ svn diff factor.R > Index: factor.R > =================================================================== > --- factor.R (revision 37559) > +++ factor.R (working copy) > @@ -25,7 +25,25 @@ > ## Help old S users: > category <- function(...) .Defunct() > > -levels <- function(x) attr(x, "levels") > +levels <- function(x, ...) UseMethod("levels") > + > +levels.default <- function(x, ...) attr(x, "levels") > + > +levels.list <- function(x, drop = TRUE) > +{ > + tmp <- lapply(x, levels, drop = drop) > + if (drop) { > + tmp1 <- unlist(lapply(tmp, is.null)) > + tmp <- tmp[!tmp1] > + } > + return(tmp) > +} > + > +levels.data.frame <- function(x, ...) > +{ > + return(levels.list(x, ...)) > +} > + > nlevels <- function(x) length(levels(x)) > > "levels<-" <- function(x, value) UseMethod("levels<-") > -- Lep pozdrav / With regards, Gregor Gorjanc ---------------------------------------------------------------------- University of Ljubljana PhD student Biotechnical Faculty Zootechnical Department URI: http://www.bfro.uni-lj.si/MR/ggorjan Groblje 3 mail: gregor.gorjanc <at> bfro.uni-lj.si SI-1230 Domzale tel: +386 (0)1 72 17 861 Slovenia, Europe fax: +386 (0)1 72 17 888 ---------------------------------------------------------------------- "One must learn by doing the thing; for though you think you know it, you have no certainty until you try." Sophocles ~ 450 B.C. ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel