I mean, starting 2.4 not all row names are stored as characters, some are stored as integers.
On 7/16/07, miguel manese <[EMAIL PROTECTED]> wrote: > I was bit by this before. row.names are supposed to be characters, and > they are until around 2.3 iirc. Then at 2.4, they started storing it > as integers presumably to save space (and probably because ints are > more low-maintenance data types than strings). So to the user (e.g. > through row.names() ) they are still characters, but internally they > are not. I don't know what c(NA, 4L) stands for though (I see that it > has 4 elems...), or why the other is c(NA, -4L). However, in my code I > access them as a vector of integers, > > rownames = getAttrib(df, R_RowNamesSymbol); > if (IS_INTEGER(rownames)) { > for (int i = 0; i < LENGTH(rownames); i++) foo(INTEGER(rownames)[i] ...); > } > > Cheers, > M. Manese > > On 7/15/07, Gabor Grothendieck <[EMAIL PROTECTED]> wrote: > > Below x1, x2 and x3 all have the same data and all have the same value > > for row.names(x); however, the internal values of their row.names differ. > > The internal value of row.names is c(NA, -4L) for x1, c(NA, 4L) for x2 and > > c("1", "2", "3", "4") for x3; nevertheless, identical regards x1 and x2 as > > identical while x3 is not identical to either of x1 or x2. > > > > Is this intended? > > Desirable? > > Why do we need different internal representations for row.names > > for x1 and x2? > > > > > > > x1 <- x2 <- x3 <- data.frame(x = 11:14) > > > row.names(x2) <- 1:4 > > > row.names(x3) <- as.character(1:4) > > > > > > # they all have the same value for row.names() > > > row.names(x1) > > [1] "1" "2" "3" "4" > > > row.names(x2) > > [1] "1" "2" "3" "4" > > > row.names(x3) > > [1] "1" "2" "3" "4" > > > > > > # but internally they are all different > > > dput(x1) > > structure(list(x = 11:14), .Names = "x", row.names = c(NA, -4L > > ), class = "data.frame") > > > dput(x2) > > structure(list(x = 11:14), .Names = "x", row.names = c(NA, 4L > > ), class = "data.frame") > > > dput(x3) > > structure(list(x = 11:14), .Names = "x", row.names = c("1", "2", > > "3", "4"), class = "data.frame") > > > > > > # identical regards x1 and x2 as the same while x3 differs > > > identical(x1, x2) > > [1] TRUE > > > identical(x1, x3) > > [1] FALSE > > > identical(x2, x3) > > [1] FALSE > > > > > > R.version.string # XP > > [1] "R version 2.5.1 (2007-06-27)" > > > > ______________________________________________ > > R-devel@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel