Gavin Simpson wrote: > On Fri, 2007-09-14 at 11:24 +0100, Robin Hankin wrote: >> Hi Gavin >> >> thanks for that. . . it does 99% of what I wanted. >> I'd forgotten about the na.print argument. >> >> It's considerably nicer than my other solution >> which converted to character, then jj[is.na(jj)] <- "-" >> then noquote(jj). >> >> But sometimes I just need nice LaTeX tables >> and I can't think of a way to arrange things >> so that: (i) I have only one set of numbers to maintain, >> and (ii) an NA appears as a "-" in the LaTeX table. > > Ok, then the xtable package and function is your answer. You can use > this within Sweave but I think you need to set the output to latex in > the Sweave chunk? > > Is this closer to what you want? > >> print.xtable(xtable(jj), NA.string = "-") > % latex table generated in R 2.5.1 by xtable 1.4-6 package > % Fri Sep 14 11:43:34 2007 > \begin{table}[ht] > \begin{center} > \begin{tabular}{rrrrrr} > \hline > & 1 & 2 & 3 & 4 & 5 \\ > \hline > 1 & 2.00 & 3.00 & 4.00 & 1.00 & 10.00 \\ > 2 & 0.00 & 5.00 & 7.00 & $-$ & 12.00 \\ > 3 & 3.00 & 7.00 & $-$ & 4.00 & 14.00 \\ > 4 & 2.00 & $-$ & $-$ & 2.00 & 4.00 \\ > 5 & 7.00 & 15.00 & 11.00 & 7.00 & 40.00 \\ > \hline > \end{tabular} > \end{center} > \end{table} >
Another approach that I use a lot is to use the latex facilities in Hmisc by Frank Harrell. For example, \documentclass{article} \begin{document} \SweaveOpts{fig=FALSE, results=hide, echo=FALSE} <<>>= library(Hmisc) Z <- matrix(rnorm(20), ncol=4) rownames(Z) <- letters[1:nrow(Z)] colnames(Z) <- LETTERS[1:ncol(Z)] @ <<results=tex>>= latex(A, dec=3, center='none', table.env=FALSE, file="") @ <<results=tex>>= latex(A, dec=1, cgroup=c("Column labels"), n.cgroup=c(ncol(Z)), caption="A title", center='centering', file="") @ \end{document} Markus > HTH > > G > >> best wishes >> >> rksh >> >> On 14 Sep 2007, at 09:52, Gavin Simpson wrote: >> >>> On Fri, 2007-09-14 at 09:34 +0100, Robin Hankin wrote: >>>> Hello everyone >>>> >>>> >>>> I am preparing a document using Sweave in which I want my matrices >>>> to appear as tables. I am running into problems because as my >>>> Rnw files stand, I have to change table entries twice, once for >>>> the matrix and once for the typeset table. >>>> >>>> I have lots of material like the following. How can I arrange >>>> my Rnw file so that I only have to change one set of figures >>>> when my numbers change? >>>> >>>> One reason I prefer tables here is that the NA entries >>>> appear as "-" in the table, but as "NA" in the Schunk. >>>> Is there a way to make the Schunk typeset NAs >>>> as minuses? >>> See ?print.default and its argument na.print: >>> >>>> print.default(jj, na.print = "-") >>> [,1] [,2] [,3] [,4] [,5] >>> [1,] 2 3 4 1 10 >>> [2,] 0 5 7 - 12 >>> [3,] 3 7 - 4 14 >>> [4,] 2 - - 2 4 >>> [5,] 7 15 11 7 40 >>> >>> Is that what you meant? It still prints the [1,] bits... >>> >>> HTH >>> >>> G >>> >>>> >>>> >>>> \begin{table} >>>> \centering >>>> \begin{tabular}{|cccc|c|}\hline >>>> \multicolumn{4}{|c|}{brand}&\\ \hline >>>> A&B&C&D&total\\ \hline >>>> 2 & 3 & 4 & 1 & 10 \\ >>>> 0 & 5 & 7 & - & 12 \\ >>>> 3 & 7 & - & 4 & 14 \\ >>>> 2 & - & - & 2 & 4 \\ \hline >>>> 7&15&11&7&40\\ \hline >>>> \end{tabular} >>>> \caption{snipped caption} >>>> \end{table} >>>> >>>> >>>> <<>>= >>>> jj <- matrix(c(2, 3, 4, 1, >>>> 0, 5, 7, NA, >>>> 3, 7, NA, 4, >>>> 2, NA, NA, 2 >>>> ),byrow=TRUE,nrow=4) >>>> jj <- rbind(jj,apply(jj,2,sum,na.rm=TRUE)) >>>> jj <- cbind(jj,apply(jj,1,sum,na.rm=TRUE)) >>>> jj >>>> @ >>>> >>>> >>>> >> -- >> Robin Hankin >> Uncertainty Analyst >> National Oceanography Centre, Southampton >> European Way, Southampton SO14 3ZH, UK >> tel 023-8059-7743 >> -- Markus Jantti Abo Akademi University [EMAIL PROTECTED] http://www.iki.fi/~mjantti ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.