Hi Gregor, before even considering methods for "list" and "data.frame", can you explain why you think it is important for levels() to become a generic function at all? For me, levels belong to factors (or then to contour plots, or co-plots ) but exactly because level is a too generic word, it seems to me to be problematic as a generic function.
How would describe the purpose of the levels() generic? >>>>> "Gregor" == Gregor Gorjanc <[EMAIL PROTECTED]> >>>>> on Mon, 20 Mar 2006 23:27:21 +0100 writes: Gregor> oops, this does not pass R CMD check. I will have to read manuals a bit Gregor> more. Gregor> ... Gregor> * checking S3 generic/method consistency ... WARNING Gregor> levels: Gregor> function(x, ...) Gregor> levels.list: Gregor> function(x, drop) Gregor> levels: Gregor> function(x, ...) Gregor> levels.data.frame: Gregor> function(x, drop) Gregor> ... Gregor> Anyway, I would like to ask what is the "opinion" about writing methods Gregor> for classes as list and data.frame. Methods for this might not be as Gregor> simple as for numeric, character, factor and it would be nice that there Gregor> would be some guidelines for at least: Gregor> - what should be the "general" output i.e. list or something else - I Gregor> understand that it is hard to say in advance, but a common policy might Gregor> not hurt Gregor> - what to do if a method for a list or data.frame can not be applied to Gregor> 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<-") >> Gregor> -- Gregor> Lep pozdrav / With regards, Gregor> Gregor Gorjanc Gregor> ---------------------------------------------------------------------- Gregor> University of Ljubljana PhD student Gregor> Biotechnical Faculty Gregor> Zootechnical Department URI: http://www.bfro.uni-lj.si/MR/ggorjan Gregor> Groblje 3 mail: gregor.gorjanc <at> bfro.uni-lj.si Gregor> SI-1230 Domzale tel: +386 (0)1 72 17 861 Gregor> Slovenia, Europe fax: +386 (0)1 72 17 888 Gregor> ---------------------------------------------------------------------- Gregor> "One must learn by doing the thing; for though you think you know it, Gregor> you have no certainty until you try." Sophocles ~ 450 B.C. Gregor> ______________________________________________ Gregor> R-devel@r-project.org mailing list Gregor> https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel