]> git.donarmstrong.com Git - xtable.git/blobdiff - pkg/vignettes/xtableGallery.Rnw
Vignette: remove aov/lm/glm examples, combine row/colname, add tabcolsep
[xtable.git] / pkg / vignettes / xtableGallery.Rnw
index 2c771d854fdc6849d2bed1f5153974803705ab8e..4451b0e6f6724dd2179bb52e4eca347f99173bc2 100644 (file)
@@ -5,22 +5,28 @@
 % !Rnw weave = knitr\r
 % \VignetteEngine{knitr::knitr}\r
 %**************************************************************************\r
-\documentclass[article, nojss]{jss}\r
+\documentclass{article}\r
+\usepackage[a4paper,height=24cm]{geometry}\r
+\usepackage{parskip}\r
+\usepackage{titlesec}\r
+\titleformat\subsubsection{\bfseries\itshape}{}{0pt}{}\r
 \usepackage{booktabs}\r
 \usepackage{longtable}\r
 \usepackage{rotating}\r
 \usepackage{tabularx}\r
-\title{The xtable Gallery}\r
-\author{Jonathan Swinton and others\\<jonathan@swintons.net>}\r
-\Abstract{This document gives a gallery of tables which can be made by using the\r
-  \texttt{xtable} package to create \LaTeX\ output. It doubles as a regression\r
-  check for the package.}\r
-\Keywords{Reproducible research, \LaTeX}\r
-\Shorttitle{\pkg{xtable} Gallery} %% JSS header\r
-\Address{Jonathan Swinton\\E-mail: \email{jonathan@swintons.net}} %% JSS last pg\r
+\newcommand\code[1]{\texttt{#1}}\r
 \newcommand\p{\vspace{2ex}}\r
+\setcounter{tocdepth}{2}\r
 \begin{document}\r
 \r
+\title{The xtable Gallery}\r
+\author{Jonathan Swinton and others}\r
+\maketitle\r
+\r
+\tableofcontents\r
+\r
+\newpage\r
+\r
 <<include=FALSE>>=\r
 library(knitr)\r
 opts_chunk$set(fig.path='figdir/fig', debug=TRUE, echo=TRUE)\r
@@ -35,12 +41,10 @@ data(tli)
 xtable(tli[1:10, ])\r
 @\r
 \r
-\newpage\r
-\r
 \subsection{Matrix}\r
 <<results='asis'>>=\r
 design.matrix <- model.matrix(~ sex*grade, data = tli[1:10, ])\r
-xtable(design.matrix)\r
+xtable(design.matrix, digits = 0)\r
 @\r
 \r
 \subsection{aov}\r
@@ -49,18 +53,20 @@ fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data = tli)
 xtable(fm1)\r
 @\r
 \r
+\newpage\r
+\r
 \subsection{lm}\r
 <<results='asis'>>=\r
 fm2 <- lm(tlimth ~ sex*ethnicty, data = tli)\r
 xtable(fm2)\r
 @\r
 \r
-\p\textbf{\itshape Anova table (one model)}\r
+\subsubsection{Anova table (one model)}\r
 <<results='asis'>>=\r
 xtable(anova(fm2))\r
 @\r
 \r
-\p\textbf{\itshape Anova table (two models)}\r
+\subsubsection{Anova table (two models)}\r
 <<results='asis'>>=\r
 fm2b <- lm(tlimth ~ ethnicty, data = tli)\r
 xtable(anova(fm2b, fm2))\r
@@ -72,79 +78,18 @@ fm3 <- glm(disadvg ~ ethnicty*grade, data = tli, family = binomial)
 xtable(fm3)\r
 @\r
 \r
-\p\textbf{\itshape Anova table}\r
+\p\r
 <<results='asis'>>=\r
 xtable(anova(fm3))\r
 @\r
 \r
-\subsection{More aov}\r
-<<results='asis'>>=\r
-## Venables and Ripley (1997, p. 210)\r
-N <- c(0,1,0,1,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0)\r
-P <- c(1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,1,1,0)\r
-K <- c(1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0)\r
-yield <- c(49.5,62.8,46.8,57.0,59.8,58.5,55.5,56.0,62.8,55.8,69.5,55.0,\r
-           62.0,48.8,45.5,44.2,52.0,51.5,49.8,48.8,57.2,59.0,53.2,56.0)\r
-npk <- data.frame(block = gl(6,4), N = factor(N), P = factor(P),\r
-                  K = factor(K), yield = yield)\r
-npk.aov <- aov(yield ~ block + N*P*K, npk)\r
-xtable(npk.aov)\r
-@\r
-\r
-\p\textbf{\itshape Anova table}\r
-<<results='asis'>>=\r
-xtable(anova(npk.aov))\r
-@\r
-\r
-\p\textbf{\itshape Summary table}\r
-<<results='asis'>>=\r
-xtable(summary(npk.aov))\r
-@\r
-\r
-<<results='asis'>>=\r
-## Alternative multistratum model\r
-op <- options(contrasts = c("contr.helmert", "contr.treatment"))\r
-npk.aovE <- aov(yield ~  N*P*K + Error(block), npk)\r
-options(op)\r
-xtable(npk.aovE)\r
-@\r
-\r
-<<results='asis'>>=\r
-xtable(summary(npk.aovE))\r
-@\r
-\r
-\subsection{More lm}\r
-<<results='asis'>>=\r
-## Dobson (1990, p. 9) plant weight data\r
-ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)\r
-trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)\r
-group <- gl(2,10,20, labels = c("Ctl","Trt"))\r
-weight <- c(ctl, trt)\r
-lm.D9 <- lm(weight ~ group)\r
-xtable(lm.D9)\r
-@\r
-\r
-<<results='asis'>>=\r
-xtable(anova(lm.D9))\r
-@\r
-\r
-\subsection{More glm}\r
-<<results='asis'>>=\r
-## Dobson (1990, p. 93) randomized controlled trial\r
-counts <- c(18,17,15,20,10,20,25,13,12)\r
-outcome <- gl(3,1,9)\r
-treatment <- gl(3,3)\r
-d.AD <- data.frame(treatment, outcome, counts)\r
-glm.D93 <- glm(counts ~ outcome + treatment, family = poisson)\r
-xtable(glm.D93, align = "r|llrc")\r
-@\r
-\r
 \subsection{prcomp}\r
 <<results='asis'>>=\r
 pr1 <- prcomp(USArrests)\r
 xtable(pr1)\r
 @\r
 \r
+\p\r
 <<results='asis'>>=\r
 xtable(summary(pr1))\r
 @\r
@@ -159,8 +104,7 @@ xtable(summary(pr1))
 temp.ts <- ts(cumsum(1 + round(rnorm(100), 0)),\r
               start = c(1954, 7), frequency = 12)\r
 temp.table <- xtable(temp.ts, digits = 0)\r
-caption(temp.table) <- "Time series example"\r
-print(temp.table, floating = TRUE)\r
+temp.table\r
 @\r
 \r
 <<include=FALSE>>=\r
@@ -183,6 +127,8 @@ print(temp.table, floating = TRUE)
 # }\r
 @\r
 \r
+\newpage\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
@@ -206,6 +152,8 @@ display(x) <- xdisplay(x)
 x\r
 @\r
 \r
+\newpage\r
+\r
 \section{Sanitization}\r
 <<results='asis'>>=\r
 insane <- data.frame(Name = c("Ampersand","Greater than","Less than",\r
@@ -222,12 +170,14 @@ xtable(insane)
 Sometimes you might want to have your own sanitization function.\r
 \r
 <<results='asis'>>=\r
-wanttex <- xtable(data.frame(label =\r
+wanttex <- xtable(data.frame(Column =\r
                              paste("Value_is $10^{-",1:3,"}$", sep = "")))\r
 print(wanttex, sanitize.text.function =\r
       function(str) gsub("_", "\\_", str, fixed = TRUE))\r
 @\r
 \r
+\newpage\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
@@ -235,7 +185,7 @@ a custom \code{sanitize.text.function}.
 <<results='asis'>>=\r
 mat <- round(matrix(c(0.9, 0.89, 200, 0.045, 2.0), c(1, 5)), 4)\r
 rownames(mat) <- "$y_{t-1}$"\r
-colnames(mat) <- c("$R^2$", "$\\bar{R}^2$", "F-stat", "S.E.E", "DW")\r
+colnames(mat) <- c("$R^2$", "$\\bar{x}$", "F-stat", "S.E.E", "DW")\r
 mat <- xtable(mat)\r
 print(mat, sanitize.text.function = function(x) {x})\r
 @\r
@@ -257,14 +207,14 @@ print(xtable(money), sanitize.rownames.function = function(x) {x})
 \section{Format examples}\r
 \subsection{Adding a centering environment}\r
 <<results='asis'>>=\r
-print(xtable(lm.D9, caption = "\\tt latex.environments = NULL"),\r
-      floating = TRUE, latex.environments = NULL)\r
-print(xtable(lm.D9, caption = "\\tt latex.environments = \"\""),\r
+print(xtable(money, caption = "\\tt latex.environments = \"\""),\r
       floating = TRUE, latex.environments = "")\r
-print(xtable(lm.D9, caption = "\\tt latex.environments = \"center\""),\r
+print(xtable(money, caption = "\\tt latex.environments = \"center\""),\r
       floating = TRUE, latex.environments = "center")\r
 @\r
 \r
+\newpage\r
+\r
 \subsection{Column alignment}\r
 <<results='asis'>>=\r
 tli.table <- xtable(tli[1:10, ])\r
@@ -272,18 +222,20 @@ align(tli.table) <- rep("r", 6)
 tli.table\r
 @\r
 \r
-\p\textbf{\itshape Left aligned strings with column lines}\r
+\subsubsection{Left aligned strings with column lines}\r
 <<results='asis'>>=\r
 align(tli.table) <- "|rrl|l|lr|"\r
 tli.table\r
 @\r
 \r
-\p\textbf{\itshape Fixed width columns}\r
+\subsubsection{Fixed width columns}\r
 <<results='asis'>>=\r
 align(tli.table) <- "|rr|lp{3cm}l|r|"\r
 tli.table\r
 @\r
 \r
+\newpage\r
+\r
 \subsection{Number of digits}\r
 One number for all columns,\r
 <<results='asis'>>=\r
@@ -306,7 +258,10 @@ digits(tli.table) <- matrix(0:4, nrow = 10, ncol = ncol(tli)+1)
 tli.table\r
 @\r
 \r
-\subsection{Suppress row names}\r
+\newpage\r
+\r
+\subsection{Suppress row/column names}\r
+\subsubsection{Suppress row names}\r
 <<results='asis'>>=\r
 tli.table <- xtable(tli[1:10, ])\r
 print(tli.table, include.rownames = FALSE)\r
@@ -326,7 +281,9 @@ Revert the alignment to what is was before.
 align(tli.table) <- "|rr|lp{3cm}l|r|"\r
 @\r
 \r
-\subsection{Suppress column names}\r
+\newpage\r
+\r
+\subsubsection{Suppress column names}\r
 <<results='asis'>>=\r
 print(tli.table, include.colnames = FALSE)\r
 @\r
@@ -338,12 +295,14 @@ print(tli.table, include.colnames = FALSE,
       hline.after = c(0,nrow(tli.table)))\r
 @\r
 \r
-\subsection{Suppress row and column names}\r
+\subsubsection{Suppress row and column names}\r
 <<results='asis'>>=\r
 print(tli.table, include.colnames = FALSE, include.rownames = FALSE)\r
 @\r
 \r
-\subsection{Rotate row and column names}\r
+\newpage\r
+\r
+\subsection{Rotate row/column names}\r
 The \code{rotate.rownames} and \code{rotate.colnames} arguments can be used to\r
 rotate the row and/or column names. This requires \verb|\usepackage{rotating}|\r
 in the \LaTeX\ preamble.\r
@@ -352,18 +311,18 @@ in the \LaTeX\ preamble.
 print(tli.table, rotate.rownames = TRUE, rotate.colnames = TRUE)\r
 @\r
 \r
-\subsection{Horizontal lines}\r
-\p\textbf{\itshape Line locations}\r
+\newpage\r
 \r
+\subsection{Horizontal lines}\r
+\subsubsection{Line locations}\r
 Use the \code{hline.after} argument to specify the position of the\r
 horizontal lines.\r
 \r
 <<results='asis'>>=\r
-print(xtable(anova(glm.D93)), hline.after = c(1))\r
+print(xtable(anova(fm3)), hline.after = c(1))\r
 @\r
 \r
-\p\textbf{\itshape Line styles}\r
-\r
+\subsubsection{Line styles}\r
 Specifying \code{booktabs = TRUE} will generate three line types. By default,\r
 when no value is given for \code{hline.after}, a \verb|\toprule| will be drawn\r
 above the table, a \verb|\midrule| after the table headings and a\r
@@ -396,9 +355,14 @@ hlines <- c(-1, 0, 1, nrow(bktbs))
 print(bktbs, booktabs = TRUE, hline.after = hlines)\r
 @\r
 \r
-\subsection{Table-level LaTeX}\r
+\subsection{Table level commands}\r
 <<results='asis'>>=\r
-print(xtable(anova(glm.D93)), size = "small")\r
+print(xtable(anova(fm3)), size = "large")\r
+@\r
+\r
+\p\r
+<<results='asis'>>=\r
+print(xtable(anova(fm3)), size = "\\setlength{\\tabcolsep}{12pt}")\r
 @\r
 \r
 \subsection{Long tables}\r
@@ -413,8 +377,7 @@ print(x.big, hline.after=c(-1, 0), tabular.environment = 'longtable')
 %% The column name alignment is off in the following example.\r
 %% It needs some revision before exposing it. - CR, 7/2/2012\r
 %\r
-%\p\textbf{\itshape Long tables with the header on each page}\r
-%\r
+%\subsubsection{Long tables with the header on each page}\r
 %The \code{add.to.row} argument can be used to display the header\r
 %for a long table on each page, and to add a "continued" footer\r
 %on all pages except the last page.\r
@@ -446,8 +409,8 @@ fairly nearby.
 \r
 <<results='asis'>>=\r
 x <- x[1:30, ]\r
-x.small <- xtable(x, label = 'tabsmall', caption = 'A sideways table')\r
-print(x.small, 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
@@ -473,6 +436,8 @@ align(x.width) <- "|l|X|l|l|l|"
 print(x.width, tabular.environment = "tabularx", width = "\\textwidth")\r
 @\r
 \r
+\newpage\r
+\r
 \section{Suppressing printing}\r
 By default the \code{print} method will print the \LaTeX\ or HTML to standard\r
 output and also return the character strings invisibly.  The printing to\r