Skip to content

How to find out if a data frame has automatic row names?

4 messages · Sarah Goslee, Peter Ehlers, Andreas Borg

#
Hi all,

I just stumbled across the difference between explicit and 'automatic' 
row names for data frames. Is there a quick way to find out if a data 
frame has automatic row names or not? Of course I know this for data 
frames that I create myself, but what if a function needs to extract 
this information for an argument?

The following example shows that this property is not easily visible:

 > # data frame with automatic row names
 > df <- data.frame(a=1:2, b=3:4)
 > # data frame with explicit row names
 > df2 <- data.frame(a=1:2, b=3:4, row.names=1:2)
 > # printing does not reveal any difference
 > df
  a b
1 1 3
2 2 4
 > df2
  a b
1 1 3
2 2 4
 > # both are considered equal
 > all.equal(df, df2)
[1] TRUE
 > identical(df, df2)
[1] TRUE
 > # calling rownames gives the same result
 > rownames(df)
[1] "1" "2"
 > rownames(df2)
[1] "1" "2"
 > # when converting to a matrix, it makes a difference
 > as.matrix(df)
     a b
[1,] 1 3
[2,] 2 4
 > as.matrix(df2)
  a b
1 1 3
2 2 4

Thanks for any suggestion,

Andreas
#
If as.matrix distinguishes between the two options, then you could look
at the code for that function and see how it's done.

Sarah

On Tue, Dec 7, 2010 at 6:34 AM, Andreas Borg
<andreas.borg at unimedizin-mainz.de> wrote:
#
On 2010-12-07 03:34, Andreas Borg wrote:
Check ?.row_names_info

Peter Ehlers
#
That does it. Thanks!