235 lines
5.5 KiB
Plaintext
235 lines
5.5 KiB
Plaintext
|
%\VignetteIndexEntry{xtable List of Tables Gallery}
|
||
|
%\VignetteDepends{xtable}
|
||
|
%\VignetteKeywords{LaTeX, HTML, table}
|
||
|
%\VignettePackage{xtable}
|
||
|
% !Rnw weave = knitr
|
||
|
% \VignetteEngine{knitr::knitr}
|
||
|
%**************************************************************************
|
||
|
\documentclass{article}
|
||
|
\usepackage[a4paper,height=24cm]{geometry} % geometry first
|
||
|
\usepackage{array}
|
||
|
\usepackage{booktabs}
|
||
|
\usepackage{longtable}
|
||
|
\usepackage{parskip}
|
||
|
\usepackage{rotating}
|
||
|
\usepackage{tabularx}
|
||
|
\usepackage{titlesec}
|
||
|
\usepackage{hyperref} % hyperref last
|
||
|
\titleformat\subsubsection{\bfseries\itshape}{}{0pt}{}
|
||
|
\newcommand\p{\vspace{2ex}}
|
||
|
\newcommand\code[1]{\texttt{#1}}
|
||
|
\newcommand\pkg[1]{\textbf{#1}}
|
||
|
\setcounter{tocdepth}{2}
|
||
|
\begin{document}
|
||
|
|
||
|
\title{\bfseries\Large The \code{xtableList} Gallery}
|
||
|
\author{\bfseries David J. Scott}
|
||
|
\maketitle
|
||
|
|
||
|
\tableofcontents
|
||
|
|
||
|
\newpage
|
||
|
|
||
|
\section{Introduction}
|
||
|
This document represents a test of the functions in \pkg{xtable} which
|
||
|
deal with lists of dataframes.
|
||
|
|
||
|
<<set, include=FALSE>>=
|
||
|
library(knitr)
|
||
|
opts_chunk$set(fig.path='Figures/list', debug=TRUE, echo=TRUE)
|
||
|
opts_chunk$set(out.width='0.9\\textwidth')
|
||
|
@
|
||
|
|
||
|
The first step is to load the package and set some options for this document.
|
||
|
<<package, results='asis'>>=
|
||
|
library(xtable)
|
||
|
options(xtable.floating = FALSE)
|
||
|
options(xtable.timestamp = "")
|
||
|
options(width = 60)
|
||
|
@
|
||
|
|
||
|
|
||
|
Next we create a list of dataframes with attributes.
|
||
|
|
||
|
<<data>>=
|
||
|
require(xtable)
|
||
|
data(mtcars)
|
||
|
mtcars <- mtcars[, 1:6]
|
||
|
mtcarsList <- split(mtcars, f = mtcars$cyl)
|
||
|
### Reduce the size of the list elements
|
||
|
mtcarsList[[1]] <- mtcarsList[[1]][1,]
|
||
|
mtcarsList[[2]] <- mtcarsList[[2]][1:2,]
|
||
|
mtcarsList[[3]] <- mtcarsList[[3]][1:3,]
|
||
|
attr(mtcarsList, "subheadings") <- paste0("Number of cylinders = ",
|
||
|
names(mtcarsList))
|
||
|
attr(mtcarsList, "message") <- c("Line 1 of Message",
|
||
|
"Line 2 of Message")
|
||
|
str(mtcarsList)
|
||
|
attributes(mtcarsList)
|
||
|
@ %def
|
||
|
|
||
|
Now create a list of \code{xtable} objects.
|
||
|
|
||
|
|
||
|
<<xtablelist>>=
|
||
|
xList <- xtableList(mtcarsList)
|
||
|
str(xList)
|
||
|
@ %def
|
||
|
|
||
|
Create an alternative version where the lists have different values
|
||
|
for \code{digits}.
|
||
|
|
||
|
|
||
|
<<xtablelist1>>=
|
||
|
xList1 <- xtableList(mtcarsList, digits = c(0,2,0,0,0,1,2))
|
||
|
str(xList1)
|
||
|
@ %def
|
||
|
|
||
|
<<xtablelist2>>=
|
||
|
xList2 <- xtableList(mtcarsList, digits = c(0,2,0,0,0,1,2),
|
||
|
caption = "Caption to List",
|
||
|
label = "tbl:xtableList")
|
||
|
str(xList2)
|
||
|
@ %def
|
||
|
|
||
|
Further versions with no subheadings, and no message
|
||
|
|
||
|
<<xtablelist3>>=
|
||
|
attr(mtcarsList, "subheadings") <- NULL
|
||
|
xList3 <- xtableList(mtcarsList)
|
||
|
str(xList3)
|
||
|
@ %def
|
||
|
|
||
|
<<xtablelist4>>=
|
||
|
attr(mtcarsList, "message") <- NULL
|
||
|
xList4 <- xtableList(mtcarsList)
|
||
|
str(xList4)
|
||
|
@ %def
|
||
|
|
||
|
\newpage
|
||
|
|
||
|
\section{Single Column Names}
|
||
|
\label{sec:single-column-names}
|
||
|
|
||
|
Print the list of \code{xtable} objects with a single header of the
|
||
|
column names.
|
||
|
|
||
|
First the default.
|
||
|
|
||
|
|
||
|
<<singledefault, results='asis'>>=
|
||
|
print.xtableList(xList)
|
||
|
@ %def
|
||
|
|
||
|
Booktabs should work.
|
||
|
<<singlebooktabs, results='asis'>>=
|
||
|
print.xtableList(xList, booktabs = TRUE)
|
||
|
@ %def
|
||
|
|
||
|
With digits being specified.
|
||
|
<<singlebooktabs1, results='asis'>>=
|
||
|
print.xtableList(xList1, booktabs = TRUE)
|
||
|
@ %def
|
||
|
|
||
|
Row and column names, subheadings, and the message can be sanitized.
|
||
|
|
||
|
<<sanitize>>=
|
||
|
large <- function(x){
|
||
|
paste0('{\\Large{\\bfseries ', x, '}}')
|
||
|
}
|
||
|
italic <- function(x){
|
||
|
paste0('{\\emph{ ', x, '}}')
|
||
|
}
|
||
|
bold <- function(x){
|
||
|
paste0('{\\bfseries ', x, '}')
|
||
|
}
|
||
|
red <- function(x){
|
||
|
paste0('{\\color{red} ', x, '}')
|
||
|
}
|
||
|
@ %def
|
||
|
|
||
|
|
||
|
<<sanitizesingle, results='asis'>>=
|
||
|
print.xtableList(xList,
|
||
|
sanitize.rownames.function = italic,
|
||
|
sanitize.colnames.function = large,
|
||
|
sanitize.subheadings.function = bold,
|
||
|
sanitize.message.function = red,
|
||
|
booktabs = TRUE)
|
||
|
@ %def
|
||
|
|
||
|
A label and caption can be added.
|
||
|
<<singlecaption, results='asis'>>=
|
||
|
print.xtableList(xList2, floating = TRUE)
|
||
|
@ %def
|
||
|
|
||
|
Rotated column names?
|
||
|
<<singlerotated, results='asis'>>=
|
||
|
print.xtableList(xList, rotate.colnames = TRUE)
|
||
|
@ %def
|
||
|
|
||
|
No subheadings?
|
||
|
<<nosubheadings, results='asis'>>=
|
||
|
print.xtableList(xList3)
|
||
|
@ %def
|
||
|
|
||
|
No message?
|
||
|
<<nomessage, results='asis'>>=
|
||
|
print.xtableList(xList4)
|
||
|
@ %def
|
||
|
|
||
|
|
||
|
\section{Multiple Column Names}
|
||
|
\label{sec:multiple-column-names}
|
||
|
|
||
|
Print the list of \code{xtable} objects with multiple headers of the
|
||
|
column names.
|
||
|
|
||
|
First the default with multiple column name headers.
|
||
|
|
||
|
<<multipledefault, results='asis'>>=
|
||
|
print.xtableList(xList, colnames.format = "multiple")
|
||
|
@ %def
|
||
|
|
||
|
Using booktabs:
|
||
|
|
||
|
<<multiplebooktabs, results='asis'>>=
|
||
|
print.xtableList(xList, colnames.format = "multiple",
|
||
|
booktabs = TRUE)
|
||
|
@ %def
|
||
|
|
||
|
With sanitization.
|
||
|
<<sanitizemultiple, results='asis'>>=
|
||
|
print.xtableList(xList, colnames.format = "multiple",
|
||
|
sanitize.rownames.function = italic,
|
||
|
sanitize.colnames.function = large,
|
||
|
sanitize.subheadings.function = bold,
|
||
|
sanitize.message.function = red,
|
||
|
booktabs = TRUE)
|
||
|
@ %def
|
||
|
|
||
|
A label and caption can be added.
|
||
|
<<multiplecaption, results='asis'>>=
|
||
|
print.xtableList(xList2, colnames.format = "multiple",
|
||
|
floating = TRUE)
|
||
|
@ %def
|
||
|
|
||
|
Rotated column names?
|
||
|
<<multiplerotated, results='asis'>>=
|
||
|
print.xtableList(xList, colnames.format = "multiple",
|
||
|
rotate.colnames = TRUE)
|
||
|
@ %def
|
||
|
|
||
|
No subheadings?
|
||
|
<<multiplenosubheadings, results='asis'>>=
|
||
|
print.xtableList(xList3, colnames.format = "multiple")
|
||
|
@ %def
|
||
|
|
||
|
No message?
|
||
|
<<multiplenomessage, results='asis'>>=
|
||
|
print.xtableList(xList4, colnames.format = "multiple")
|
||
|
@ %def
|
||
|
|
||
|
|
||
|
\end{document}
|