Misalignment of <NA> in rownames (PR#1905)

ripley@stats.ox.ac.uk ripley@stats.ox.ac.uk
Tue, 13 Aug 2002 21:35:13 +0100 (BST)


Have you looked at R-devel?  Neither of these are currently incorrect.

Rstrlen is an exported entry point, and I don't think we want to mess with
it.  It is used for other than printing.

On Tue, 13 Aug 2002 brahm@alum.mit.edu wrote:

> An NA in the rownames of a matrix (or dataframe) causes misalignment when the
> matrix is printed:
>
> R> x <- matrix(1:12, 3,4, dimnames=list(letters[1:3], LETTERS[1:4]))
> R> rownames(x)[2] <- NA
> R> x
>      A B C  D
> a    1 4 7 10
> <NA>   2 5 8 11
> c    3 6 9 12
>
> The bug is in function Rstrlen, in src/main/printutils.c.  MatrixRowLabel and
> MatrixColumnLabel (same file) rely on Rstrlen to count the characters in each
> label, but Rstrlen doesn't understand NA's.  Here's a patch, to be applied
> between lines 242 ("int len;") and 243 ("len = 0;"):
>
>     if (s == CHAR(NA_STRING))
>       return quote ? R_print.na_width : R_print.na_width_noquote;
>
> which solves the problem:
>
> R-patched> x
>      A B C  D
> a    1 4 7 10
> <NA> 2 5 8 11
> c    3 6 9 12
>
> -----------------------------------------------------------------------------
>
> An NA in the colnames has similar misalignment problems:
>
> R> x <- matrix(1:12, 3,4, dimnames=list(letters[1:3], LETTERS[1:4]))
> R> colnames(x)[2] <- NA
> R> x
>   A <NA> C  D
> a 1  4 7 10
> b 2  5 8 11
> c 3  6 9 12
>
> But this time it's because lines 72, 139, 213, 299, and 375 of
> src/main/printarray.c use "strlen", which doesn't know about NA's:
>
>   clabw = strlen(CHAR(STRING_ELT(cl, j)));
>
> My patch is to replace "strlen" with "Rstrlen" in each case:
>
>   clabw = Rstrlen(CHAR(STRING_ELT(cl, j)), 0);
>
> and again this solves the problem:
>
> R-patched> x
>   A <NA> C  D
> a 1    4 7 10
> b 2    5 8 11
> c 3    6 9 12
>
> -----------------------------------------------------------------------------
>
> References:
>
> Don MacQueen reported a similar problem in the body of the matrix on 5/1/02:
>   http://www.r-project.org/nocvs/mail/r-help/2002/3455.html
> but this was fixed in R-1.5.1.
>
> Derek Yi <Derek.Yi@fmr.com> first noted the rownames problem on 8/1/02 in
>   http://www.r-project.org/nocvs/mail/r-help/2002/6366.html
> and Brian D. Ripley <ripley@stats.ox.ac.uk> replied on 8/1/02 in
>   http://www.r-project.org/nocvs/mail/r-help/2002/6367.html
>
> -----------------------------------------------------------------------------
>
> Version:
>  platform = sparc-sun-solaris2.6
>  arch = sparc
>  os = solaris2.6
>  system = sparc, solaris2.6
>  status =
>  major = 1
>  minor = 5.1
>  year = 2002
>  month = 06
>  day = 17
>  language = R
>
> Search Path:
>  .GlobalEnv, package:misc, package:io, package:arrays, package:ls1, package:g.data, package:db, package:ts, package:ctest, Autoloads, package:base
>
> --
>                               -- David Brahm (brahm@alum.mit.edu)
>
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> Send "info", "help", or "[un]subscribe"
> (in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
> _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
>

-- 
Brian D. Ripley,                  ripley@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 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._