[Rd] [R] rownames, colnames, and date and time

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed Mar 29 15:56:40 CEST 2006


Yet again, this is the wrong list for suggesting changes to R.  Please do 
use R-devel for that purpose (and I have moved this).

If this bothers you (it all works as documented, so why not use it as 
documented?), please supply a suitable patch to the current R-devel 
sources and it will be considered.

And BTW, row.names is the canonical accessor function for data frames,
and its 'value' argument is documented differently from that for rownames 
for an array.  Cf:

Details:

      The extractor functions try to do something sensible for any
      matrix-like object 'x'.  If the object has 'dimnames' the first
      component is used as the row names, and the second component (if
      any) is used for the col names.  For a data frame, 'rownames' and
      'colnames' are equivalent to 'row.names' and 'names' respectively.

Note:

      'row.names' is similar to 'rownames' for arrays, and it has a
      method that calls 'rownames' for an array argument.

I am not sure why R decided to add rownames for the same purpose as 
row.names: eventually they were made equivalent.


On Tue, 21 Mar 2006, Erich Neuwirth wrote:

> I noticed something surprising (in R 2.2.1 on WinXP)
> According to the documentation, rownames and colnames are character vectors.
> Assigning a vector of class POSIXct or POSIXlt as rownames or colnames
> therefore is not strictly according to the rules.
> In some cases, R performs a reasonable typecast, but in some other cases
> where the same typecast also would be possible, it does not.
>
> Assigning a vector of class POSIXct to the rownames or names of a
> dataframe creates a reasonable string representation of the dates (and
> possibly times).
> Assigning such a vector to the rownames or colnames of a matrix produces
> rownames or colnames consisting of the integer representation of the
> date-time value.
> Trying to assign a vector of class POSIXlt in all cases
> (dataframes and matrices, rownames, colnames, names)
> produces an error.
>
> Demonstration code is given below.
>
> This is somewhat inconsistent.
> Perhaps a reasonable solution could be that the typecast
> used for POSIXct and dataframes is used in all the other cases also.
>
> Code:
>
> mymat<-matrix(1:4,nrow=2,ncol=2)
> mydf<-data.frame(mymat)
> mydates<-as.POSIXct(c("2001-1-24","2005-12-25"))
>
> rownames(mydf)<-mydates
> names(mydf)<-mydates
> rownames(mymat)<-mydates
> colnames(mymat)<-mydates
>
> print(deparse(mydates))
> print(deparse(rownames(mydf)))
> print(deparse(names(mydf)))
> print(deparse(rownames(mymat)))
> print(deparse(colnames(mymat)))
>
> mydates1<-as.POSIXlt(mydates)
>
> # the following lines will not work and
> # produce errors
>
> rownames(mydf)<-mydates1
> names(mydf)<-mydates1
> rownames(mymat)<-mydates1
> colnames(mymat)<-mydates1
>
>
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-devel mailing list