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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._