On Oct 11, 2012, at 16:02 , Bert Gunter wrote: > ... and further > >> identical(as.list(df2),as.list(df1)) > [1] TRUE > > in R 2.15.0 > > Not sure whether these sorts of degenerate cases are of much value, > though. But I'll leave that for the wizards.
Looks like this is easier to fix that to argue pro/con fixing it... AFAICS, there's a gap in the logic in as.data.frame.matrix: if (length(row.names) != nrows) row.names <- .set_row_names(nrows) but length(NULL) is 0 so we can end up leaving row.names at NULL and eventually nulling it in the result. An explicit check for is.null(row.names) should help. -pd > > -- Bert > > On Wed, Oct 10, 2012 at 11:22 PM, Hervé Pagès <hpa...@fhcrc.org> wrote: >> Hi, >> >> Two ways to create what should normally be the same data frame: >> >>> df1 <- data.frame(a=character(0), b=character(0))> df1 >> [1] a b >> <0 rows> (or 0-length row.names) >> >>> df2 <- as.data.frame(matrix(character(0), ncol=2, dimnames=list(NULL, >> letters[1:2]))) >>> df2 >> [1] a b >> <0 rows> (or 0-length row.names) >> >> unique() works as expected except that I get a warning on 'df2': >> >>> unique(df1) >> [1] a b >> <0 rows> (or 0-length row.names) >> >>> unique(df2) >> [1] a b >> <0 rows> (or 0-length row.names) >> Warning message: >> In is.na(rows) : is.na() applied to non-(list or vector) of type 'NULL' >> >> Look like the two data frames are not identical: >> >>> identical(df1, df2) >> [1] FALSE >> >>> all.equal(df1, df2) >> [1] "Attributes: < Length mismatch: comparison on first 1 components >" >> >>> attributes(df1) >> $names >> [1] "a" "b" >> >> $row.names >> integer(0) >> >> $class >> [1] "data.frame" >> >>> attributes(df2) >> $names >> [1] "a" "b" >> >> $class >> [1] "data.frame" >> >> Actually 'df2' is considered broken by validObject(): >> >>> validObject(df1) >> [1] TRUE >> >>> validObject(df2) >> Error in validObject(df2) : >> invalid class “data.frame” object: slots in class definition but not in >> object: "row.names" >> >> This is with R 2.15 and recent R devel. >> >> Cheers, >> H. >> >> -- >> Hervé Pagès >> >> Program in Computational Biology >> Division of Public Health Sciences >> Fred Hutchinson Cancer Research Center >> 1100 Fairview Ave. N, M1-B514 >> P.O. Box 19024 >> Seattle, WA 98109-1024 >> >> E-mail: hpa...@fhcrc.org >> Phone: (206) 667-5791 >> Fax: (206) 667-1319 >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > > > > -- > > Bert Gunter > Genentech Nonclinical Biostatistics > > Internal Contact Info: > Phone: 467-7374 > Website: > http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Email: pd....@cbs.dk Priv: pda...@gmail.com ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel