\setcounter{tocdepth}{2}\r
%% Define \code \proglang and \pkg commands\r
\newcommand\code[1]{\texttt{#1}}\r
-\newcommand{\pkg}[1]{{\fontseries{b}\selectfont #1}}\r
-\newcommand\proglang[1]{\textsf{#1}}\r
+\newcommand\pkg[1]{\textbf{#1}}\r
+\newcommand\R{\textsf{R}}\r
%% url and hyperref\r
\usepackage[hyphens]{url}\r
\usepackage{hyperref}\r
-\r
-\usepackage{listings}\r
-\lstset{language = TeX, basicstyle = \ttfamily,\r
- keywordstyle = \ttfamily,\r
- emphstyle = \itshape,\r
- emph = {options},\r
- lineskip = 0pt}\r
-\r
-\r
\begin{document}\r
\r
\title{The \pkg{xtable} Gallery}\r
\pkg{xtable} package to create \LaTeX\ output. It doubles as a\r
regression check for the package.\r
\r
-\r
<<include=FALSE>>=\r
library(knitr)\r
opts_chunk$set(fig.path='figdir/fig', debug=TRUE, echo=TRUE)\r
options(xtable.floating = FALSE)\r
@\r
\r
-\r
\section{Gallery}\r
\subsection{Data frame}\r
<<results='asis'>>=\r
xtable(fm1)\r
@\r
\r
-\r
\subsection{lm}\r
<<results='asis'>>=\r
fm2 <- lm(tlimth ~ sex*ethnicty, data = tli)\r
xtable(fm3)\r
@\r
\r
-\p\r
+\subsubsection{Analysis of deviance}\r
<<results='asis'>>=\r
xtable(anova(fm3))\r
@\r
# xtable(pr2)\r
@\r
\r
-\newpage\r
\subsection{Time series}\r
<<results='asis'>>=\r
temp.ts <- ts(cumsum(1 + round(rnorm(100), 0)),\r
temp.table\r
@\r
\r
+\newpage\r
+\r
<<include=FALSE>>=\r
# ## Demonstrate saving to file\r
# for(i in c("latex", "html")) {\r
# }\r
@\r
\r
-\r
\section{Helper functions for formatting}\r
The functions \code{xalign}, \code{xdigits}, and \code{xdisplay} are useful for\r
formatting tables in a sensible way. Consider the output produced by the default\r
function(str) gsub("_", "\\_", str, fixed = TRUE))\r
@\r
\r
-\r
-\r
\subsection{Markup in tables}\r
Markup can be included in tables, including in column and row names, by using\r
a custom \code{sanitize.text.function}.\r
\r
<<results='asis'>>=\r
x <- matrix(rnorm(1000), ncol = 10)\r
-x.big <- xtable(x, caption = 'A \\code{longtable} spanning several pages')\r
-print(x.big, hline.after=c(-1, 0), tabular.environment = 'longtable')\r
+x.big <- xtable(x, caption = "A \\code{longtable} spanning several pages")\r
+print(x.big, hline.after=c(-1, 0), tabular.environment = "longtable")\r
@\r
\r
%% The column name alignment is off in the following example.\r
%% add.to.row = addtorow)\r
%% @\r
\r
+\newpage\r
+\r
\subsection{Use of \code{add.to.row} argument}\r
-Here is an example of the use of the \code{add.to.row} argument, taken\r
-from a question on Stack Exchange:\r
-\url{http://stackoverflow.com/questions/19846796/adding-titles-to-xtable}.\r
+The following frequency table has outer dimnames: \code{Grade3} and\r
+\code{Grade6}.\r
\r
-<<addtorow>>=\r
+<<>>=\r
Grade3 <- c("A","B","B","A","B","C","C","D","A","B",\r
"C","C","C","D","B","B","D","C","C","D")\r
Grade6 <- c("A","A","A","B","B","B","B","B","C","C",\r
"A","C","C","C","D","D","D","D","D","D")\r
-Cohort <- table(Grade3,Grade6)\r
-rownames(Cohort) <- 1:4\r
-colnames(Cohort) <- 5:8\r
-addtorow <- list()\r
-addtorow$pos <- list()\r
-addtorow$pos[[1]] <- 0\r
-addtorow$pos[[2]] <- 0\r
-addtorow$command <- c('& \\multicolumn{4}{c}{Grade 6} \\\\\n',\r
- "Grade 3 & A & B & C & D \\\\\n")\r
-print(xtable(Cohort, caption = 'My Title'), caption.placement = 'bottom',\r
- add.to.row = addtorow, include.colnames = FALSE,\r
- floating = TRUE)\r
+Cohort <- table(Grade3, Grade6)\r
+Cohort\r
+@\r
+\r
+\p\r
+The default behavior of \code{print.xtable} is to strip outer dimnames.\r
+<<results='asis'>>=\r
+xtable(Cohort)\r
@\r
\r
+\p\r
+The desired column labels can be created using \code{add.to.row}, in this case\r
+applying two commands to ``row number zero'' while suppressing the basic column\r
+names.\r
\r
-<<printaddtorow, echo = FALSE, results = 'asis'>>=\r
-print(xtable(Cohort, caption = 'My Title'), caption.placement = 'bottom',\r
- add.to.row = addtorow, include.colnames = FALSE,\r
- floating = TRUE)\r
-@ %def\r
+<<results='asis'>>=\r
+addtorow <- list()\r
+addtorow$pos <- list(0, 0)\r
+addtorow$command <- c("& \\multicolumn{4}{c}{Grade 6} \\\\\n",\r
+ "Grade 3 & A & B & C & D \\\\\n")\r
+print(xtable(Cohort), add.to.row = addtorow, include.colnames = FALSE)\r
+@\r
\r
\subsection{Sideways tables}\r
Requires \verb|\usepackage{rotating}| in the LaTeX\r
\r
<<results='asis'>>=\r
x <- x[1:30, ]\r
-x.side <- xtable(x, caption = 'A sideways table')\r
-print(x.side, floating = TRUE, floating.environment = 'sidewaystable')\r
+x.side <- xtable(x, caption = "A sideways table")\r
+print(x.side, floating = TRUE, floating.environment = "sidewaystable")\r
@\r
\clearpage\r
\r
print(x.rescale, scalebox = 0.7)\r
@\r
\r
-\subsection{Aligning Fixed Width Columns}\r
+\newpage\r
\r
-Note that using specifications such as \lstinline+p{2cm}+ always\r
+\subsection{Aligning fixed width columns}\r
+Note that using specifications such as \verb|p{2cm}| always\r
produces a \textbf{left aligned} column. What if some other alignment\r
is desired?\r
\r
of tables with fixed width columns and different alignments using\r
standard \LaTeX.\r
\r
-This question appears on Stack Exchange:\\\r
-\url{http://tex.stackexchange.com/questions/12703/how-to-create-fixed-width-table-columns-with-text-raggedright-centered-raggedlef}\r
-\r
-The response is to use the \lstinline+array+ package, defining new\r
+One solution is to use the \verb|array| package, defining new\r
column formats.\r
\r
-\begin{lstlisting}\r
+\begin{verbatim}\r
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\r
\arraybackslash\hspace{0pt}}m{#1}}\r
\newcolumntype{C}[1]{>{\centering\let\newline\\\r
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\r
\arraybackslash\hspace{0pt}}m{#1}}\r
\newcolumntype{P}[1]{>{\raggedright\tabularxbackslash}p{#1}}\r
-\end{lstlisting}\r
+\end{verbatim}\r
\r
These allow for very sophisticated cell formatting, namely\r
left-aligned, centred, or right-aligned text, with recognition of line\r
breaks for the first three new column types. If these lines are\r
-included along with \lstinline+\usepackage{array}+, then the following\r
+included along with \verb|\usepackage{array}|, then the following\r
is possible.\r
\r
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\r
\arraybackslash\hspace{0pt}}m{#1}}\r
\newcolumntype{P}[1]{>{\raggedright\tabularxbackslash}p{#1}}\r
\r
-<<arrayexample>>=\r
-df <- data.frame(name = c("A","B"),\r
- right = c(1.4, 34.6),\r
- left = c(1.4, 34.6),\r
- text = c("txt1","txt2"))\r
-@ %def\r
-\r
-Here is the output produced by printing an\r
-\lstinline+"xtable"+ object.\r
-\r
-<<arraytable>>=\r
-print(xtable(df, align = c("|l", "|c", "|R{3cm}","|L{3cm}","| p{3cm}|")),\r
- floating = FALSE, include.rownames = FALSE)\r
-@ %def\r
-\r
-\r
-Using the \pkg{knitr} option \code{'asis'} we obtain the table.\r
-\r
-<<arrayprint, results = 'asis'>>=\r
-print(xtable(df, align = c("|l", "|c", "|R{3cm}","|L{3cm}","| p{3cm}|")),\r
+<<results='asis'>>=\r
+df <- data.frame(name = c("A","B"), right = c(1.4, 34.6),\r
+ left = c(1.4, 34.6), text = c("txt1","txt2"))\r
+print(xtable(df, align = c("l", "|c", "|R{3cm}", "|L{3cm}", "| p{3cm}|")),\r
floating = FALSE, include.rownames = FALSE)\r
-@ %def\r
-\r
-\r
-\r
+@\r
\r
\subsection{Table width}\r
The \code{tabularx} environment is for typesetting tables whose overall width is\r
\r
\section{Acknowledgements}\r
Most of the examples in this gallery are taken from the \pkg{xtable}\r
-documentation.\r
+documentation. Two examples (\code{add.to.row} and `Aligning fixed width\r
+columns') are from Stack Exchange.\r
\r
-\section{\proglang{R} session information}\r
+\section{\R\ session information}\r
<<results='asis'>>=\r
toLatex(sessionInfo())\r
@\r