[Rd] rownames() problem with 0-extent arrays (PR#9136)
ripley at stats.ox.ac.uk
ripley at stats.ox.ac.uk
Wed Aug 16 14:46:06 CEST 2006
The bug here comes from code assuming that
paste("row", numeric(0), sep="")
is of length 0. See ?paste.
Fixed for 2.4.0.
On Fri, 11 Aug 2006, richard_raubertas at merck.com wrote:
> [R 2.3.1 on Windows XP]
>
> Hello,
> The 'do.NULL=FALSE' option of 'rownames' and 'colnames' does not
> work as documented when the array has a 0-extent dimension:
>
> tmp <- matrix(1:15, ncol=3, dimnames=list(letters[1:5], LETTERS[1:3]))
> rownames(tmp) # Fine
> rownames(tmp[0,,drop=FALSE]) # NULL (okay, but see question below)
> rownames(tmp[0,,drop=FALSE], do.NULL=FALSE) # "row"
>
> The last line returns a character vector of length 1, "row", rather
> than character(0) as implied by the second paragraph of the details
> section of ?rownames:
>
> "If 'do.NULL' is 'FALSE', a character vector (of length 'NROW(x)'
> or 'NCOL(x)') is returned in any case, prepending 'prefix' to
> simple numbers, if there are no dimnames or the corresponding
> component of the dimnames is 'NULL'."
>
> ----------
>
> A separate but related question (not a bug) has to do with the handling
> of dimnames for 0-extent arrays. If an array starts out with non-NULL
> dimnames and is subscripted down to have 0-extent, the corresponding
> component is set to NULL, rather than character(0):
>
> dimnames(tmp[0,,drop=FALSE]) # first component is NULL
>
> Why is that? Note that this is different from how data frames are
> handled:
>
> tmp.df <- data.frame(tmp)
> dimnames(tmp.df[0,]) # first component is character(0)
>
> The description in ?dimnames seems to allow character(0) components
> of dimnames,
>
> "The dimnames of a matrix or array can be 'NULL' or a list of the
> same length as 'dim(x)'. If a list, its components are either
> 'NULL' or a character vector the length of the appropriate
> dimension of 'x'."
>
> yet the implementation seems to resist them:
>
> tmp2 <- tmp[0,,drop=FALSE]
> dimnames(tmp2) <- list(character(0), LETTERS[1:3])
> dimnames(tmp2) # still NULL
>
> So my question is whether it would be reasonable to change 'dimnames'
> and/or "dimnames<-" to use (or at least allow) character(0) rather than
> NULL for array dimensions of 0 extent.
>
> Rich Raubertas
> Merck & Co.
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
--
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