From 36940a94d04223aaa0450dd964802e6bc643c578 Mon Sep 17 00:00:00 2001 From: roosen Date: Tue, 4 Oct 2011 15:44:18 +0000 Subject: [PATCH] xtable Version 1.5-6 (2009-11-08) downloaded from CRAN on 2011-10-04. git-svn-id: svn://scm.r-forge.r-project.org/svnroot/xtable@2 edb9625f-4e0d-4859-8d74-9fd3b1da38cb --- pkg/DESCRIPTION | 12 + pkg/NAMESPACE | 35 +++ pkg/NEWS | 10 + pkg/R/print.xtable.R | 432 ++++++++++++++++++++++++++++++++ pkg/R/table.attributes.R | 154 ++++++++++++ pkg/R/xtable.R | 261 +++++++++++++++++++ pkg/data/tli.txt | 101 ++++++++ pkg/inst/doc/xtableGallery.pdf | Bin 0 -> 137501 bytes pkg/inst/doc/xtableGallery.snw | 440 +++++++++++++++++++++++++++++++++ pkg/man/print.xtable.Rd | 57 +++++ pkg/man/string.Rd | 30 +++ pkg/man/table.attributes.Rd | 47 ++++ pkg/man/tli.Rd | 20 ++ pkg/man/xtable.Rd | 316 +++++++++++++++++++++++ 14 files changed, 1915 insertions(+) create mode 100644 pkg/DESCRIPTION create mode 100644 pkg/NAMESPACE create mode 100644 pkg/NEWS create mode 100644 pkg/R/print.xtable.R create mode 100644 pkg/R/table.attributes.R create mode 100644 pkg/R/xtable.R create mode 100644 pkg/data/tli.txt create mode 100644 pkg/inst/doc/xtableGallery.pdf create mode 100644 pkg/inst/doc/xtableGallery.snw create mode 100644 pkg/man/print.xtable.Rd create mode 100644 pkg/man/string.Rd create mode 100644 pkg/man/table.attributes.Rd create mode 100644 pkg/man/tli.Rd create mode 100644 pkg/man/xtable.Rd diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION new file mode 100644 index 0000000..92c726b --- /dev/null +++ b/pkg/DESCRIPTION @@ -0,0 +1,12 @@ +Package: xtable +Version: 1.5-6 +Date: 2009/10/30 +Title: Export tables to LaTeX or HTML +Author: David B. Dahl +Maintainer: David B. Dahl +Description: Coerce data to LaTeX and HTML tables +Depends: R (>= 2.6.0) +License: GPL (>= 2) +Packaged: 2009-11-06 22:52:33 UTC; dahl +Repository: CRAN +Date/Publication: 2009-11-08 17:53:42 diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE new file mode 100644 index 0000000..521cf2d --- /dev/null +++ b/pkg/NAMESPACE @@ -0,0 +1,35 @@ +# NAMESPACE work by Robert Gentleman +# in e-mail on July 30, 2007. + +export("caption<-", "caption", "label", "label<-", + "align<-", "align", "digits<-", "digits", "display<-", + "display", "xtable") + +S3method("print", "xtable") +S3method("caption<-", "xtable") +S3method("caption", "xtable") +S3method("label", "xtable") +S3method("label<-", "xtable") +S3method("align<-", "xtable") +S3method("align", "xtable") +S3method("digits", "xtable") +S3method("digits<-", "xtable") +S3method("display<-", "xtable") +S3method("display", "xtable") +S3method("xtable", "data.frame") +S3method("xtable", "matrix") +S3method("xtable", "table") +S3method("xtable", "anova") +S3method("xtable", "aov") +S3method("xtable", "summary.aov") +S3method("xtable", "summary.aovlist") +S3method("xtable", "aovlist") +S3method("xtable", "lm") +S3method("xtable", "summary.lm") +S3method("xtable", "glm") +S3method("xtable", "summary.glm") +S3method("xtable", "prcomp") +S3method("xtable", "summary.prcomp") +S3method("xtable", "coxph") +S3method("xtable", "ts") +S3method("xtable", "zoo") diff --git a/pkg/NEWS b/pkg/NEWS new file mode 100644 index 0000000..897a8d8 --- /dev/null +++ b/pkg/NEWS @@ -0,0 +1,10 @@ +1.5-6 (2009-10-30) + * Support caption at the top in the LaTeX longtable. + * Use options()$OutDec for decimal mark. + +1.5-5 (2009-03-24) + * Added html.table.attributes to set the attributed of the tag for HTML tables. + * Accommodated logicals by converting to characters. + * Add an extra space at end of each line for LaTeX tables. + * Fixed typographical error in documentation. + diff --git a/pkg/R/print.xtable.R b/pkg/R/print.xtable.R new file mode 100644 index 0000000..84abb53 --- /dev/null +++ b/pkg/R/print.xtable.R @@ -0,0 +1,432 @@ +### xtable package +### +### Produce LaTeX and HTML tables from R objects. +### +### Copyright 2000-2007 David B. Dahl +### +### This file is part of the `xtable' library for R and related languages. +### It is made available under the terms of the GNU General Public +### License, version 2, or at your option, any later version, +### incorporated herein by reference. +### +### This program is distributed in the hope that it will be +### useful, but WITHOUT ANY WARRANTY; without even the implied +### warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +### PURPOSE. See the GNU General Public License for more +### details. +### +### You should have received a copy of the GNU General Public +### License along with this program; if not, write to the Free +### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +### MA 02111-1307, USA +print.xtable <- function( + x, + type="latex", + file="", + append=FALSE, + floating=TRUE, + floating.environment="table", + table.placement="ht", + caption.placement="bottom", + latex.environments=c("center"), + tabular.environment="tabular", + size=NULL, + hline.after=c(-1,0,nrow(x)), + NA.string="", + include.rownames=TRUE, + include.colnames=TRUE, + only.contents=FALSE, + add.to.row=NULL, + sanitize.text.function=NULL, + sanitize.rownames.function=sanitize.text.function, + sanitize.colnames.function=sanitize.text.function, + math.style.negative=FALSE, + html.table.attributes="border=1", + ...) { + # Claudio Agostinelli dated 2006-07-28 hline.after + # By default it print an \hline before and after the columns names independently they are printed or not and at the end of the table + # Old code that set hline.after should include c(-1, 0, nrow(x)) in the hline.after vector + # If you do not want any \hline inside the data, set hline.after to NULL + # PHEADER instead the string '\\hline\n' is used in the code + # Now hline.after counts how many time a position appear + # I left an automatic PHEADER in the longtable is this correct? + + # Claudio Agostinelli dated 2006-07-28 include.rownames, include.colnames + pos <- 0 + if (include.rownames) pos <- 1 + + # Claudio Agostinelli dated 2006-07-28 hline.after checks + if (any(hline.after < -1) | any(hline.after > nrow(x))) stop("'hline.after' must be inside [-1, nrow(x)]") + + # Claudio Agostinelli dated 2006-07-28 add.to.row checks + if (!is.null(add.to.row)) { + if (is.list(add.to.row) && length(add.to.row)==2) { + if (is.null(names(add.to.row))) { + names(add.to.row) <- c('pos', 'command') + } else if (any(sort(names(add.to.row))!=c('command', 'pos'))) { + stop("the names of the elements of 'add.to.row' must be 'pos' and 'command'") + } + if (is.list(add.to.row$pos) && is.vector(add.to.row$command, mode='character')) { + if ((npos <- length(add.to.row$pos)) != length(add.to.row$command)) { + stop("the length of 'add.to.row$pos' must be equal to the length of 'add.to.row$command'") + } + if (any(unlist(add.to.row$pos) < -1) | any(unlist(add.to.row$pos) > nrow(x))) { + stop("the values in add.to.row$pos must be inside the interval [-1, nrow(x)]") + } + } else { + stop("the first argument ('pos') of 'add.to.row' must be a list, the second argument ('command') must be a vector of mode character") + } + } else { + stop("'add.to.row' argument must be a list of length 2") + } + } else { + add.to.row <- list(pos=list(), command=vector(length=0, mode="character")) + npos <- 0 + } + + # Claudio Agostinelli dated 2006-07-28 add.to.row + # Add further commands at the end of rows + if (type=="latex") { + PHEADER <- "\\hline\n" + } else { + PHEADER <- "" + } + + lastcol <- rep(" ", nrow(x)+2) + if (!is.null(hline.after)) { + add.to.row$pos[[npos+1]] <- hline.after + add.to.row$command <- c(add.to.row$command, PHEADER) + } + if ( length(add.to.row$command) > 0 ) { + for (i in 1:length(add.to.row$command)) { + addpos <- add.to.row$pos[[i]] + freq <- table(addpos) + addpos <- unique(addpos) + for (j in 1:length(addpos)) { + lastcol[addpos[j]+2] <- paste(lastcol[addpos[j]+2], paste(rep(add.to.row$command[i], freq[j]), sep="", collapse=""), sep=" ") + } + } + } + + if (length(type)>1) stop("\"type\" must have length 1") + type <- tolower(type) + if (!all(!is.na(match(type,c("latex","html"))))) stop("\"type\" must be in {\"latex\", \"html\"}") + if (!all(!is.na(match(floating.environment,c("table","sidewaystable"))))) stop("\"type\" must be in {\"table\", \"sidewaystable\"}") + if (!all(!is.na(match(unlist(strsplit(table.placement, split="")),c("H","h","t","b","p","!"))))) { + stop("\"table.placement\" must contain only elements of {\"h\",\"t\",\"b\",\"p\",\"!\"}") + } + if (!all(!is.na(match(caption.placement,c("bottom","top"))))) stop("\"caption.placement\" must be either {\"bottom\",\"top\"}") + + if (type=="latex") { + BCOMMENT <- "% " + ECOMMENT <- "\n" + # See e-mail from "John S. Walker " dated 5-19-2003 regarding "texfloat" + # See e-mail form "Fernando Henrique Ferraz P. da Rosa" " dated 10-28-2005 regarding "longtable" + if ( tabular.environment == "longtable" & floating == TRUE ) { + warning("Attempt to use \"longtable\" with floating=TRUE. Changing to FALSE.") + floating <- FALSE + } + if ( floating == TRUE ) { + # See e-mail from "Pfaff, Bernhard " dated 7-09-2003 regarding "suggestion for an amendment of the source" + # See e-mail from "Mitchell, David" " dated 2003-07-09 regarding "Additions to R xtable package" + # See e-mail from "Garbade, Sven" dated 2006-05-22 regarding the floating environment. + BTABLE <- paste("\\begin{", floating.environment, "}",ifelse(!is.null(table.placement), + paste("[",table.placement,"]",sep=""),""),"\n",sep="") + if ( is.null(latex.environments) || (length(latex.environments)==0) ) { + BENVIRONMENT <- "" + EENVIRONMENT <- "" + } + else { + BENVIRONMENT <- "" + EENVIRONMENT <- "" + for ( i in 1:length(latex.environments) ) { + if ( latex.environments[i] == "" ) next + BENVIRONMENT <- paste(BENVIRONMENT, "\\begin{",latex.environments[i],"}\n",sep="") + EENVIRONMENT <- paste("\\end{",latex.environments[i],"}\n",EENVIRONMENT,sep="") + } + } + ETABLE <- paste("\\end{", floating.environment, "}\n", sep="") + } + else { + BTABLE <- "" + ETABLE <- "" + BENVIRONMENT <- "" + EENVIRONMENT <- "" + } + + tmp.index.start <- 1 + if ( ! include.rownames ) { + while ( attr(x,"align",exact=TRUE)[tmp.index.start] == '|' ) tmp.index.start <- tmp.index.start + 1 + tmp.index.start <- tmp.index.start + 1 + } + BTABULAR <- paste("\\begin{",tabular.environment,"}{", + paste(c(attr(x, "align",exact=TRUE)[tmp.index.start:length(attr(x,"align",exact=TRUE))], "}\n"), + sep="", collapse=""), + sep="") + + ## fix 10-26-09 (robert.castelo@upf.edu) the following 'if' condition is added here to support + ## a caption on the top of a longtable + if (tabular.environment == "longtable" && caption.placement=="top") { + BCAPTION <- "\\caption{" + ECAPTION <- "} \\\\ \n" + if ((!is.null(attr(x,"caption",exact=TRUE))) && (type=="latex")) BTABULAR <- paste(BTABULAR, BCAPTION, attr(x,"caption",exact=TRUE), ECAPTION, sep="") + } + # Claudio Agostinelli dated 2006-07-28 add.to.row position -1 + BTABULAR <- paste(BTABULAR,lastcol[1], sep="") + # the \hline at the end, if present, is set in full matrix + ETABULAR <- paste("\\end{",tabular.environment,"}\n",sep="") + + # BSIZE contributed by Benno in e-mail dated Wednesday, December 01, 2004 + if (is.null(size) || !is.character(size)) { + BSIZE <- "" + ESIZE <- "" + } else { + if(length(grep("^\\\\",size))==0){ + size <- paste("\\",size,sep="") + } + BSIZE <- paste("{",size,"\n",sep="") + ESIZE <- "}\n" + } + BLABEL <- "\\label{" + ELABEL <- "}\n" + BCAPTION <- "\\caption{" + ECAPTION <- "}\n" + BROW <- "" + EROW <- " \\\\ \n" + BTH <- "" + ETH <- "" + STH <- " & " + BTD1 <- " & " + BTD2 <- "" + BTD3 <- "" + ETD <- "" + # Based on contribution from Jonathan Swinton in e-mail dated Wednesday, January 17, 2007 + sanitize <- function(str) { + result <- str + result <- gsub("\\\\","SANITIZE.BACKSLASH",result) + result <- gsub("$","\\$",result,fixed=TRUE) + result <- gsub(">","$>$",result,fixed=TRUE) + result <- gsub("<","$<$",result,fixed=TRUE) + result <- gsub("|","$|$",result,fixed=TRUE) + result <- gsub("{","\\{",result,fixed=TRUE) + result <- gsub("}","\\}",result,fixed=TRUE) + result <- gsub("%","\\%",result,fixed=TRUE) + result <- gsub("&","\\&",result,fixed=TRUE) + result <- gsub("_","\\_",result,fixed=TRUE) + result <- gsub("#","\\#",result,fixed=TRUE) + result <- gsub("^","\\verb|^|",result,fixed=TRUE) + result <- gsub("~","\\~{}",result,fixed=TRUE) + result <- gsub("SANITIZE.BACKSLASH","$\\backslash$",result,fixed=TRUE) + return(result) + } + sanitize.numbers <- function(x) { + result <- x + if ( math.style.negative ) { + # Jake Bowers in e-mail from 2008-08-20 suggested + # disabling this feature to avoid problems with LaTeX's dcolumn package. + # by Florian Wickelmaier in e-mail + # from 2008-10-03 requested the ability to use the old behavior. + for(i in 1:length(x)) { + result[i] <- gsub("-","$-$",result[i],fixed=TRUE) + } + } + return(result) + } + sanitize.final <- function(result) { + return(result) + } + } else { + BCOMMENT <- "\n" + BTABLE <- paste("
\n",sep="") + ETABLE <- "
\n" + BENVIRONMENT <- "" + EENVIRONMENT <- "" + BTABULAR <- "" + ETABULAR <- "" + BSIZE <- "" + ESIZE <- "" + BLABEL <- "\n" + BCAPTION <- paste(" ",sep="") + ECAPTION <- " \n" + BROW <- "" + EROW <- " \n" + BTH <- " " + ETH <- " " + STH <- " " + BTD1 <- " in e-mail dated Wednesday, January 17, 2007 + BTD2[regexpr("^p",BTD2)>0] <- "left" + BTD2[BTD2=="r"] <- "right" + BTD2[BTD2=="l"] <- "left" + BTD2[BTD2=="c"] <- "center" + BTD3 <- "\"> " + ETD <- " " + sanitize <- function(str) { + result <- str + result <- gsub("&","& ",result,fixed=TRUE) + result <- gsub(">","> ",result,fixed=TRUE) + result <- gsub("<","< ",result,fixed=TRUE) + # Kurt Hornik on 2006/10/05 recommended not escaping underscores. + # result <- gsub("_", "\\_", result, fixed=TRUE) + return(result) + } + sanitize.numbers <- function(x) { + return(x) + } + sanitize.final <- function(result) { + # Suggested by Uwe Ligges in e-mail dated 2005-07-30. + result$text <- gsub(" *"," ", result$text,fixed=TRUE) + result$text <- gsub(' align="left"', "", result$text,fixed=TRUE) + return(result) + } + } + + result <- string("",file=file,append=append) + info <- R.Version() + # modified Claudio Agostinelli dated 2006-07-28 to set automatically the package version + result <- result + BCOMMENT + type + " table generated in " + + info$language + " " + info$major + "." + info$minor + " by xtable " + packageDescription('xtable')$Version + " package" + ECOMMENT + result <- result + BCOMMENT + date() + ECOMMENT + # Claudio Agostinelli dated 2006-07-28 only.contents + if (!only.contents) { + result <- result + BTABLE + result <- result + BENVIRONMENT + if ( floating == TRUE ) { + if ((!is.null(attr(x,"caption",exact=TRUE))) && (type=="html" || caption.placement=="top")) result <- result + BCAPTION + attr(x,"caption",exact=TRUE) + ECAPTION + if (!is.null(attr(x,"label",exact=TRUE)) && (type=="latex" && caption.placement=="top")) result <- result + BLABEL + attr(x,"label",exact=TRUE) + ELABEL + } + result <- result + BSIZE + result <- result + BTABULAR + } + # Claudio Agostinelli dated 2006-07-28 include.colnames, include.rownames + if (include.colnames) { + result <- result + BROW + BTH + if (include.rownames) result <- result + STH + if (is.null(sanitize.colnames.function)) { # David G. Whiting in e-mail 2007-10-09 + result <- result + paste(sanitize(names(x)),collapse=STH) + } else { + result <- result + paste(sanitize.colnames.function(names(x)), collapse=STH) # David G. Whiting in e-mail 2007-10-09 + } + result <- result + ETH + EROW + } + + cols <- matrix("",nrow=nrow(x),ncol=ncol(x)+pos) + if (include.rownames) { + if (is.null(sanitize.rownames.function)) { # David G. Whiting in e-mail 2007-10-09 + cols[,1] <- sanitize(row.names(x)) + } else { + cols[,1] <- sanitize.rownames.function(row.names(x)) # David G. Whiting in e-mail 2007-10-09 + } + } + + disp <- function(y) { + if (is.factor(y)) { + y <- levels(y)[y] + } + if (is.list(y)) { + y <- unlist(y) + } + return(y) + } + # Code for letting "digits" be a matrix was provided by Arne Henningsen in e-mail dated 2005-06-04. + if( !is.matrix( attr( x, "digits",exact=TRUE ) ) ) { + # modified Claudio Agostinelli dated 2006-07-28 + attr(x,"digits") <- matrix( attr( x, "digits",exact=TRUE ), nrow = nrow(x), ncol = ncol(x)+1, byrow = TRUE ) + } + for(i in 1:ncol(x)) { + ina <- is.na(x[,i]) + is.numeric.column <- is.numeric(x[,i]) + for( j in 1:nrow( cols ) ) { + ### modified Claudio Agostinelli dated 2009-09-14 + ### add decimal.mark=options()$OutDec + cols[j,i+pos] <- + formatC( disp( x[j,i] ), + format = ifelse( attr( x, "digits",exact=TRUE )[j,i+1] < 0, "E", attr( x, "display",exact=TRUE )[i+1] ), digits = abs( attr( x, "digits",exact=TRUE )[j,i+1] ), decimal.mark=options()$OutDec) + } + if ( any(ina) ) cols[ina,i+pos] <- NA.string + # Based on contribution from Jonathan Swinton in e-mail dated Wednesday, January 17, 2007 + if ( is.numeric.column ) { + cols[,i+pos] <- sanitize.numbers(cols[,i+pos]) + } else { + if (is.null(sanitize.text.function)) { + cols[,i+pos] <- sanitize(cols[,i+pos]) + } else { + cols[,i+pos] <- sanitize.text.function(cols[,i+pos]) + } + } + } + + multiplier <- 5 + full <- matrix("",nrow=nrow(x),ncol=multiplier*(ncol(x)+pos)+2) + full[,1] <- BROW + full[,multiplier*(0:(ncol(x)+pos-1))+2] <- BTD1 + full[,multiplier*(0:(ncol(x)+pos-1))+3] <- BTD2 + full[,multiplier*(0:(ncol(x)+pos-1))+4] <- BTD3 + full[,multiplier*(0:(ncol(x)+pos-1))+5] <- cols + full[,multiplier*(0:(ncol(x)+pos-1))+6] <- ETD + + full[,multiplier*(ncol(x)+pos)+2] <- paste(EROW, lastcol[-(1:2)], sep=" ") + if (type=="latex") full[,2] <- "" + result <- result + lastcol[2] + paste(t(full),collapse="") + if (!only.contents) { + if (tabular.environment == "longtable") { + result <- result + PHEADER + ## fix 10-27-09 Liviu Andronic (landronimirc@gmail.com) the following 'if' condition is inserted in order to avoid + ## that bottom caption interferes with a top caption of a longtable + if(caption.placement=="bottom"){ + if ((!is.null(attr(x,"caption",exact=TRUE))) && (type=="latex")) result <- result + BCAPTION + attr(x,"caption",exact=TRUE) + ECAPTION + } + if (!is.null(attr(x,"label",exact=TRUE))) result <- result + BLABEL + attr(x,"label",exact=TRUE) + ELABEL + ETABULAR <- "\\end{longtable}\n" + } + result <- result + ETABULAR + result <- result + ESIZE + if ( floating == TRUE ) { + if ((!is.null(attr(x,"caption",exact=TRUE))) && (type=="latex" && caption.placement=="bottom")) result <- result + BCAPTION + attr(x,"caption",exact=TRUE) + ECAPTION + if (!is.null(attr(x,"label",exact=TRUE)) && caption.placement=="bottom") result <- result + BLABEL + attr(x,"label",exact=TRUE) + ELABEL + } + result <- result + EENVIRONMENT + result <- result + ETABLE + } + result <- sanitize.final(result) + print(result) + + return(invisible(result$text)) +} + +"+.string" <- function(x,y) { + x$text <- paste(x$text,as.string(y)$text,sep="") + return(x) +} + +print.string <- function(x,...) { + cat(x$text,file=x$file,append=x$append) + return(invisible()) +} + +string <- function(text,file="",append=FALSE) { + x <- list(text=text,file=file,append=append) + class(x) <- "string" + return(x) +} + +as.string <- function(x,file="",append=FALSE) { + if (is.null(attr(x,"class",exact=TRUE))) + switch(data.class(x), + character=return(string(x,file,append)), + numeric=return(string(as.character(x),file,append)), + stop("Cannot coerse argument to a string")) + if (class(x)=="string") + return(x) + stop("Cannot coerse argument to a string") +} + +is.string <- function(x) { + return(class(x)=="string") +} + diff --git a/pkg/R/table.attributes.R b/pkg/R/table.attributes.R new file mode 100644 index 0000000..f2a08c7 --- /dev/null +++ b/pkg/R/table.attributes.R @@ -0,0 +1,154 @@ +### xtable package +### +### Produce LaTeX and HTML tables from R objects. +### +### Copyright 2000-2007 David B. Dahl +### +### This file is part of the `xtable' library for R and related languages. +### It is made available under the terms of the GNU General Public +### License, version 2, or at your option, any later version, +### incorporated herein by reference. +### +### This program is distributed in the hope that it will be +### useful, but WITHOUT ANY WARRANTY; without even the implied +### warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +### PURPOSE. See the GNU General Public License for more +### details. +### +### You should have received a copy of the GNU General Public +### License along with this program; if not, write to the Free +### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +### MA 02111-1307, USA + +"caption<-" <- function(x,value) UseMethod("caption<-") +"caption<-.xtable" <- function(x,value) { + if (length(value)>1) + stop("\"caption\" must have length 1") + attr(x,"caption") <- value + return(x) +} + +caption <- function(x,...) UseMethod("caption") +caption.xtable <- function(x,...) { + return(attr(x,"caption",exact=TRUE)) +} + +"label<-" <- function(x,value) UseMethod("label<-") +"label<-.xtable" <- function(x,value) { + if (length(value)>1) + stop("\"label\" must have length 1") + attr(x,"label") <- value + return(x) +} + +label <- function(x,...) UseMethod("label") +label.xtable <- function(x,...) { + return(attr(x,"label",exact=TRUE)) +} + +"align<-" <- function(x,value) UseMethod("align<-") + +# Based on contribution from Jonathan Swinton in e-mail dated Wednesday, January 17, 2007 +.alignStringToVector <- function(aString) { + # poor mans parsing - separating string of form "l{2in}llr|p{1in}c|{1in}" + # into "l{2in}" "l" "l" "r" "|" "p{1in}" "c" "|{1in}" + aString.Align <- character(0); + aString.Width <- character(0); + wString <- aString + while( nchar(wString)>0) { + aString.Align <- c(aString.Align,substr(wString,1,1)) + # is it followed by a brace? + thisWidth <- "" + if ( nchar(wString)>1 & substr(wString,2,2)=="{") { + beforeNextBrace <- regexpr("[^\\]\\}",wString) + if (beforeNextBrace <0 ) { + stop("No closing } in align string") + } + thisWidth <- substr(wString,2,beforeNextBrace+1) + wString <- substr(wString,beforeNextBrace+2,nchar(wString)) + } else { + wString <- substr(wString,2,nchar(wString)) + } + aString.Width <- c(aString.Width,thisWidth) + } + + alignAllowed <- c("l","r","p","c","|") + + if (any( !(aString.Align %in% alignAllowed))) { + warning("Nonstandard alignments in align string") + } + res <- paste(aString.Align,aString.Width,sep="") + res +} +#.alignStringToVector ("l{2in}llr|p{1in}c|{1in}") +#.alignStringToVector ("l{2in}llr|p{1in}c|") +#.alignStringToVector ("{2in}llr|p{1in}c|") # latex syntax error, but gives wrong alignment +#.alignStringToVector("llllp{3cm}") + +"align<-.xtable" <- function(x,value) { +# Based on contribution from Benno in e-mail dated Wednesday, December 01, 2004 +# Based on contribution from Jonathan Swinton in e-mail dated Wednesday, January 17, 2007 + # cat("%",value,"\n") + if ( (!is.null(value)) && ( is.character(value) ) && ( length(value) == 1 ) && ( nchar(value) > 1 ) ) { + value <- .alignStringToVector(value) + } # That should have checked we had only lrcp| + # but what if the "if statement" is false? + # For simplicity, deleting check present in version 1.4-2 and earlier. + c.value <- if (any(!is.na(match(value,"|")))) { + value[-which(value=='|')] + } else { + value + } + if (length(c.value)!=ncol(x)+1) + stop(paste("\"align\" must have length equal to",ncol(x)+1,"( ncol(x) + 1 )")) + + attr(x,"align") <- value + return(x) +} + +align <- function(x,...) UseMethod("align") +align.xtable <- function(x,...) { + return(attr(x,"align",exact=TRUE)) +} + +"digits<-" <- function(x,value) UseMethod("digits<-") +"digits<-.xtable" <- function(x,value) { + if( is.matrix( value ) ) { + if( ncol( value ) != ncol(x)+1 || nrow( value ) != nrow(x) ) { + stop( "if argument 'digits' is a matrix, it must have columns equal", + " to ", ncol(x)+1, " ( ncol(x) + 1 ) and rows equal to ", nrow(x), + " ( nrow( x )" ) + } + } else { + if( length(value)==1 ) { value <- rep(value, ncol(x)+1) } + if( length( value ) >1 & length( value ) != ncol(x)+1 ) { + stop( "if argument 'digits' is a vector of length more than one, it must have length equal", + " to ", ncol(x)+1, " ( ncol(x) + 1 )" ) + } + } + if (!is.numeric(value)) + stop("\"digits\" must be numeric") + attr(x,"digits") <- value + return(x) +} + +digits <- function(x,...) UseMethod("digits") +digits.xtable <- function(x,...) { + return(attr(x,"digits",exact=TRUE)) +} + +"display<-" <- function(x,value) UseMethod("display<-") +"display<-.xtable" <- function(x,value) { + if (length(value)!=ncol(x)+1) + stop(paste("\"display\" must have length equal to",ncol(x)+1,"( ncol(x) + 1 )")) + if (!all(!is.na(match(value,c("d","f","e","E","g","G","fg","s"))))) + stop("\"display\" must be in {\"d\",\"f\",\"e\",\"E\",\"g\",\"G\", \"fg\", \"s\"}") + attr(x,"display") <- value + return(x) +} + +display <- function(x,...) UseMethod("display") +display.xtable <- function(x,...) { + return(attr(x,"display",exact=TRUE)) +} + diff --git a/pkg/R/xtable.R b/pkg/R/xtable.R new file mode 100644 index 0000000..ec6a770 --- /dev/null +++ b/pkg/R/xtable.R @@ -0,0 +1,261 @@ +### xtable package +### +### Produce LaTeX and HTML tables from R objects. +### +### Copyright 2000-2007 David B. Dahl +### +### This file is part of the `xtable' library for R and related languages. +### It is made available under the terms of the GNU General Public +### License, version 2, or at your option, any later version, +### incorporated herein by reference. +### +### This program is distributed in the hope that it will be +### useful, but WITHOUT ANY WARRANTY; without even the implied +### warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +### PURPOSE. See the GNU General Public License for more +### details. +### +### You should have received a copy of the GNU General Public +### License along with this program; if not, write to the Free +### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +### MA 02111-1307, USA + +xtable <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + UseMethod("xtable") +} + + +## data.frame and matrix objects + +xtable.data.frame <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + logicals <- unlist(lapply(x,is.logical)) + x[,logicals] <- as.character(x[,logicals]) + characters <- unlist(lapply(x,is.character)) + factors <- unlist(lapply(x,is.factor)) + ints <- sapply(x, is.integer) + class(x) <- c("xtable","data.frame") + caption(x) <- caption + label(x) <- label + align(x) <- switch(1+is.null(align), align, + c("r",c("r","l")[(characters|factors)+1])) + digits(x) <- switch(1+is.null(digits),digits,c(0,rep(2,ncol(x)))) + # Patch from Seth Falcon , 18-May-2007 + if (is.null(display)) { + display <- rep("f", ncol(x)) + display[ints] <- "d" + display[characters | factors] <- "s" + display <- c("s", display) + } + display(x) <- display + return(x) +} + +xtable.matrix <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + return(xtable.data.frame(data.frame(x,check.names=FALSE), + caption=caption,label=label,align=align, + digits=digits,display=display)) +} + + +## table objects (of 1 or 2 dimensions) by Guido Gay, 9 Feb 2007 +## Fixed to pass R checks by DBD, 9 May 2007 +xtable.table<-function(x,caption=NULL,label=NULL,align=NULL, digits=NULL,display=NULL,...) { + if (length(dim(x))==1) { + return(xtable.matrix(matrix(x,dimnames=list(rownames(x),names(dimnames(x)))),caption=caption,label=label,align=align,digits=digits,display=display)) + } else { + return(xtable.matrix(matrix(x,ncol=dim(x)[2],nrow=dim(x)[1],dimnames=list(rownames(x),colnames(x))),caption=caption,label=label,align=align,digits=digits,display=display)) + } +} + + +## anova objects + +xtable.anova <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + suggested.digits <- c(0,rep(2,ncol(x))) + suggested.digits[grep("Pr\\(>",names(x))+1] <- 4 + suggested.digits[grep("P\\(>",names(x))+1] <- 4 + suggested.digits[grep("Df",names(x))+1] <- 0 + + class(x) <- c("xtable","data.frame") + caption(x) <- caption + label(x) <- label + align(x) <- switch(1+is.null(align),align,c("l",rep("r",ncol(x)))) + digits(x) <- switch(1+is.null(digits),digits,suggested.digits) + display(x) <- switch(1+is.null(display),display,c("s",rep("f",ncol(x)))) + return(x) +} + + +## aov objects + +xtable.aov <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + return(xtable.anova(anova(x,...),caption=caption,label=label, + align=align, digits=digits,display=display)) +} + +xtable.summary.aov <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + return(xtable.anova(x[[1]],caption=caption,label=label, + align=align, digits=digits,display=display)) +} + +xtable.summary.aovlist <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + for(i in 1:length(x)) { + if (i==1) result <- xtable.summary.aov(x[[i]],caption=caption,label=label, + align=align, digits=digits,display=display) + else result <- rbind(result,xtable.anova(x[[i]][[1]],caption=caption, + label=label, align=align, + digits=digits,display=display)) + } + return(result) +} + +xtable.aovlist <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + return(xtable.summary.aovlist(summary(x),caption=caption,label=label, + align=align, digits=digits,display=display)) +} + + + +## lm objects + +xtable.lm <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + return(xtable.summary.lm(summary(x),caption=caption,label=label, + align=align, digits=digits,display=display)) +} + +xtable.summary.lm <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + x <- data.frame(x$coef,check.names=FALSE) + + class(x) <- c("xtable","data.frame") + caption(x) <- caption + label(x) <- label + align(x) <- switch(1+is.null(align),align,c("r","r","r","r","r")) + digits(x) <- switch(1+is.null(digits),digits,c(0,4,4,2,4)) + display(x) <- switch(1+is.null(display),display,c("s","f","f","f","f")) + return(x) +} + + +## glm objects + +xtable.glm <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + return(xtable.summary.glm(summary(x),caption=caption,label=label,align=align, + digits=digits,display=display)) +} + +xtable.summary.glm <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + return(xtable.summary.lm(x,caption=caption,label=label, + align=align, digits=digits,display=display)) +} + + +## prcomp objects + +xtable.prcomp <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + x <- data.frame(x$rotation,check.names=FALSE) + + class(x) <- c("xtable","data.frame") + caption(x) <- caption + label(x) <- label + align(x) <- switch(1+is.null(align),align,c("r",rep("r",ncol(x)))) + digits(x) <- switch(1+is.null(digits),digits,c(0,rep(4,ncol(x)))) + display(x) <- switch(1+is.null(display),display,c("s",rep("f",ncol(x)))) + return(x) +} + +xtable.summary.prcomp <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + x <- data.frame(x$importance,check.names=FALSE) + + class(x) <- c("xtable","data.frame") + caption(x) <- caption + label(x) <- label + align(x) <- switch(1+is.null(align),align,c("r",rep("r",ncol(x)))) + digits(x) <- switch(1+is.null(digits),digits,c(0,rep(4,ncol(x)))) + display(x) <- switch(1+is.null(display),display,c("s",rep("f",ncol(x)))) + return(x) +} + + +# Slightly modified version of xtable.coxph contributed on r-help by +# Date: Wed, 2 Oct 2002 17:47:56 -0500 (CDT) +# From: Jun Yan +# Subject: Re: [R] xtable for Cox model output +xtable.coxph <- function (x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) +{ + cox <- x + beta <- cox$coef + se <- sqrt(diag(cox$var)) + if (is.null(cox$naive.var)) { + tmp <- cbind(beta, exp(beta), se, beta/se, 1 - pchisq((beta/se)^2, 1)) + dimnames(tmp) <- list(names(beta), + c("coef", "exp(coef)", "se(coef)", "z", "p")) + } + else { + tmp <- cbind( beta, exp(beta), se, beta/se, + signif(1 - pchisq((beta/se)^2, 1), digits - 1)) + dimnames(tmp) <- list(names(beta), + c("coef", "exp(coef)", "robust se", "z", "p")) + } + return(xtable(tmp, caption = caption, label = label, align = align, + digits = digits, display = display)) +} + +# Additional method: xtable.ts +# Contributed by David Mitchell (davidm@netspeed.com.au) +# Date: July 2003 +xtable.ts <- function(x,caption=NULL,label=NULL,align=NULL, + digits=NULL,display=NULL,...) { + if (inherits(x, "ts") && !is.null(ncol(x))) { + # COLNAMES <- paste(colnames(x)); + tp.1 <- trunc(time(x)) + tp.2 <- trunc(cycle(x)) + day.abb <- c("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat") + ROWNAMES <- switch(frequency(x), + tp.1, + "Arg2", "Arg3", ## Dummy arguments + paste(tp.1, c("Q1", "Q2", "Q3", "Q4")[tp.2], sep=" "), + "Arg5", "Arg6", + paste("Wk.", tp.1, " ", day.abb[tp.2], sep=""), + "Arg8", "Arg9", "Arg10", "Arg11", + paste(tp.1, month.abb[tp.2], sep=" ")) + tmp <- data.frame(x, row.names=ROWNAMES); + } + else if (inherits(x, "ts") && is.null(ncol(x))) { + COLNAMES <- switch(frequency(x), + "Value", + "Arg2", "Arg3", ## Dummy arguments + c("Q1", "Q2", "Q3", "Q4"), + "Arg5", "Arg6", + day.abb, + "Arg8", "Arg9", "Arg10", "Arg11", + month.abb) + ROWNAMES <- seq(from=start(x)[1], to=end(x)[1]) + tmp <- data.frame(matrix(c(rep(NA, start(x)[2] - 1), x, + rep(NA, frequency(x) - end(x)[2])), + ncol=frequency(x), byrow=TRUE), row.names=ROWNAMES) + names(tmp) <- COLNAMES + } + return(xtable(tmp, caption = caption, label = label, align = align, + digits = digits, display = display)) +} + +# Suggested by Ajay Narottam Shah in e-mail 2006/07/22 +xtable.zoo <- function(x,...) { + return(xtable(as.ts(x),...)) +} + diff --git a/pkg/data/tli.txt b/pkg/data/tli.txt new file mode 100644 index 0000000..b93213c --- /dev/null +++ b/pkg/data/tli.txt @@ -0,0 +1,101 @@ + grade sex disadvg ethnicty tlimth + 6 M YES HISPANIC 43 + 7 M NO BLACK 88 + 5 F YES HISPANIC 34 + 3 M YES HISPANIC 65 + 8 M YES WHITE 75 + 5 M NO BLACK 74 + 8 F YES HISPANIC 72 + 4 M YES BLACK 79 + 6 M NO WHITE 88 + 7 M YES HISPANIC 87 + 3 M NO WHITE 79 + 6 F NO WHITE 84 + 8 M NO WHITE 90 + 5 M NO WHITE 73 + 8 F NO WHITE 72 + 6 F NO BLACK 82 + 4 M NO WHITE 69 + 3 F YES HISPANIC 17 + 3 M NO HISPANIC 37 + 5 M NO WHITE 70 + 6 M NO WHITE 90 + 6 F NO WHITE 91 + 5 F NO WHITE 50 + 7 M NO WHITE 83 + 4 F YES BLACK 58 + 4 M YES HISPANIC 85 + 7 F NO WHITE 52 + 5 M NO WHITE 86 + 4 F YES BLACK 79 + 8 M NO WHITE 48 + 4 F NO BLACK 63 + 8 F YES WHITE 88 + 3 F YES HISPANIC 76 + 7 M NO WHITE 79 + 8 M NO WHITE 87 + 6 F NO HISPANIC 80 + 7 F NO WHITE 66 + 4 F NO WHITE 68 + 6 M NO WHITE 92 + 7 F NO WHITE 57 + 8 F NO WHITE 57 + 4 F NO WHITE 66 + 7 F NO BLACK 88 + 8 F NO BLACK 59 + 6 F NO WHITE 87 + 4 M YES BLACK 59 + 7 M NO WHITE 88 + 6 M NO HISPANIC 75 + 5 M YES HISPANIC 93 + 7 M YES BLACK 77 + 3 M NO WHITE 85 + 3 F NO WHITE 84 + 6 M NO WHITE 91 + 6 M NO WHITE 80 + 3 M YES BLACK 80 + 7 F NO WHITE 90 + 7 F NO BLACK 85 + 5 F YES HISPANIC 63 + 4 F NO WHITE 91 + 6 M NO BLACK 59 + 6 M YES WHITE 85 + 7 F NO OTHER 92 + 8 M NO HISPANIC 51 + 6 F YES OTHER 87 + 6 M NO WHITE 92 + 8 F NO WHITE 85 + 8 M YES BLACK 47 + 4 F NO WHITE 78 + 8 M YES HISPANIC 86 + 7 M NO WHITE 86 + 3 F NO BLACK 67 + 3 M YES BLACK 64 + 5 M YES HISPANIC 86 + 5 F NO WHITE 80 + 4 M YES BLACK 81 + 3 M NO WHITE 70 + 8 F NO WHITE 82 + 5 F NO WHITE 69 + 7 F NO WHITE 79 + 3 F YES BLACK 67 + 6 F NO WHITE 91 + 3 F YES HISPANIC 91 + 4 F YES HISPANIC 78 + 5 F NO WHITE 86 + 4 F NO WHITE 87 + 7 F NO WHITE 83 + 5 F NO WHITE 93 + 3 M YES BLACK 70 + 4 M YES BLACK 86 + 6 F YES BLACK 87 + 6 F NO WHITE 83 + 6 F YES BLACK 75 + 6 M NO WHITE 88 + 5 M NO WHITE 91 + 3 M YES HISPANIC 89 + 7 F NO WHITE 91 + 5 F YES WHITE 79 + 7 M NO WHITE 83 + 6 M YES HISPANIC 78 + 6 F NO WHITE 84 diff --git a/pkg/inst/doc/xtableGallery.pdf b/pkg/inst/doc/xtableGallery.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7f062bdcbe32ffe87874c238fe0b60f71a1730cc GIT binary patch literal 137501 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%0AO_+=0t%`L%mb1|8=~bw^1bUR0HS4p23jWi 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

)Vb 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 V@)!55pi&VSDLZ9~o~gd<{{Z!eXN&*< literal 0 HcmV?d00001 diff --git a/pkg/inst/doc/xtableGallery.snw b/pkg/inst/doc/xtableGallery.snw new file mode 100644 index 0000000..995db16 --- /dev/null +++ b/pkg/inst/doc/xtableGallery.snw @@ -0,0 +1,440 @@ +%\VignetteIndexEntry{xtable Gallery} +%\VignetteDepends{xtable} +%\VignetteKeywords{LaTeX,HTML,table} +%\VignettePackage{xtable} + +%************************************************************************** +% +% # $Id:$ + +% $Revision: $ +% $Author: $ +% $Date: $ + +<>= +makeme <- function() { + # I am a convenience function for debugging and can be ignored + setwd("C:/JonathanSwinton/PathwayModeling/src/R/SourcePackages/xtable/inst/doc") + Sweave("xtableGallery.RnW",stylepath=FALSE) +} +makeme() +@ + +\documentclass[letterpaper]{article} + +\title{ +The xtable gallery +} +\author{Jonathan Swinton \\ with small contributions from others} + +\usepackage{Sweave} +\SweaveOpts{prefix.string=figdir/fig,debug=TRUE,eps=FALSE,echo=TRUE} +\usepackage{rotating} +\usepackage{longtable} +%\usepackage{hyperref} +\begin{document} + +\maketitle +\section{Summary} +This document gives a gallery of tables which can be made +by using the {\tt xtable} package to create \LaTeX\ output. +It doubles as a regression check for the package. + +<<>>= +library(xtable) +@ + +\section{Gallery} +\subsection{Data frame} +Load example dataset +<<>>= +data(tli) + +## Demonstrate data.frame +tli.table <- xtable(tli[1:10,]) +digits(tli.table)[c(2,6)] <- 0 +@ +<>= +print(tli.table,floating=FALSE) +@ + +\subsection{Matrix} +<<>>= +design.matrix <- model.matrix(~ sex*grade, data=tli[1:10,]) +design.table <- xtable(design.matrix) +@ +<>= +print(design.table,floating=FALSE) +@ + +\subsection{aov} +<<>>= +fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data=tli) +fm1.table <- xtable(fm1) +@ +<>= +print(fm1.table,floating=FALSE) +@ +\subsection{lm} +<<>>= +fm2 <- lm(tlimth ~ sex*ethnicty, data=tli) +fm2.table <- xtable(fm2) +@ +<>= +print(fm2.table,floating=FALSE) +@ +\subsubsection{anova object} + +<>= +print(xtable(anova(fm2)),floating=FALSE) +@ +\subsubsection{Another anova object} +<<>>= +fm2b <- lm(tlimth ~ ethnicty, data=tli) +@ +<>= +print(xtable(anova(fm2b,fm2)),floating=FALSE) +@ + + +\subsection{glm} + +<<>>= + +## Demonstrate glm +fm3 <- glm(disadvg ~ ethnicty*grade, data=tli, family=binomial()) +fm3.table <- xtable(fm3) +@ +<>= +print(fm3.table,floating=FALSE) +@ + +\subsubsection{anova object} +@ +<>= +print(xtable(anova(fm3)),floating=FALSE) +@ + + +\subsection{More aov} +<<>>= + +## Demonstrate aov +## Taken from help(aov) in R 1.1.1 +## From Venables and Ripley (1997) p.210. +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) +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) +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) +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, + 62.0,48.8,45.5,44.2,52.0,51.5,49.8,48.8,57.2,59.0,53.2,56.0) +npk <- data.frame(block=gl(6,4), N=factor(N), P=factor(P), K=factor(K), yield=yield) +npk.aov <- aov(yield ~ block + N*P*K, npk) +op <- options(contrasts=c("contr.helmert", "contr.treatment")) +npk.aovE <- aov(yield ~ N*P*K + Error(block), npk) +options(op) +#summary(npk.aov) +@ +<>= +print(xtable(npk.aov),floating=FALSE) +@ + +\subsubsection{anova object} +<>= +print(xtable(anova(npk.aov)),floating=FALSE) +@ + +\subsubsection{Another anova object} +<>= +print(xtable(summary(npk.aov)),floating=FALSE) +@ + +<<>>= +#summary(npk.aovE) +@ +<>= +print(xtable(npk.aovE),floating=FALSE) +@ + + +<>= +print(xtable(summary(npk.aovE)),floating=FALSE) +@ + +\subsection{More lm} +<<>>= + +## Demonstrate lm +## Taken from help(lm) in R 1.1.1 +## Annette Dobson (1990) "An Introduction to Generalized Linear Models". +## Page 9: Plant Weight Data. +ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14) +trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69) +group <- gl(2,10,20, labels=c("Ctl","Trt")) +weight <- c(ctl, trt) +lm.D9 <- lm(weight ~ group) +@ +<>= +print(xtable(lm.D9),floating=FALSE) +@ + + +<>= +print(xtable(anova(lm.D9)),floating=FALSE) +@ + +\subsection{More glm} +<<>>= + +## Demonstrate glm +## Taken from help(glm) in R 1.1.1 +## Annette Dobson (1990) "An Introduction to Generalized Linear Models". +## Page 93: Randomized Controlled Trial : +counts <- c(18,17,15,20,10,20,25,13,12) +outcome <- gl(3,1,9) +treatment <- gl(3,3) +d.AD <- data.frame(treatment, outcome, counts) +glm.D93 <- glm(counts ~ outcome + treatment, family=poisson()) +@ +<>= +print(xtable(glm.D93,align="r|llrc"),floating=FALSE) +@ + +\subsection{prcomp} +<>= +if(require(stats,quietly=TRUE)) { + ## Demonstrate prcomp + ## Taken from help(prcomp) in mva package of R 1.1.1 + data(USArrests) + pr1 <- prcomp(USArrests) +} +@ +<>= +if(require(stats,quietly=TRUE)) { + print(xtable(pr1),floating=FALSE) +} +@ + + +@ +<>= + print(xtable(summary(pr1)),floating=FALSE) +@ + + + +<<>>= +# ## Demonstrate princomp +# ## Taken from help(princomp) in mva package of R 1.1.1 +# pr2 <- princomp(USArrests) +# print(xtable(pr2)) +@ +\subsection{Time series} + +<<>>= +temp.ts <- ts(cumsum(1+round(rnorm(100), 0)), start = c(1954, 7), frequency=12) + temp.table <- xtable(temp.ts,digits=0) + caption(temp.table) <- "Time series example" +@ +<>= + print(temp.table,floating=FALSE) +@ +<>= +if (FALSE) { + for(i in c("latex","html")) { + outFileName <- paste("xtable.",ifelse(i=="latex","tex",i),sep="") + print(xtable(lm.D9),type=i,file=outFileName,append=TRUE,latex.environment=NULL) + print(xtable(lm.D9),type=i,file=outFileName,append=TRUE,latex.environment="") + print(xtable(lm.D9),type=i,file=outFileName,append=TRUE,latex.environment="center") + print(xtable(anova(glm.D93,test="Chisq")),type=i,file=outFileName,append=TRUE) + print(xtable(anova(glm.D93)),hline.after=c(1),size="small",type=i,file=outFileName,append=TRUE) + # print(xtable(pr2),type=i,file=outFileName,append=TRUE) + } +} +@ + +\section{Sanitization} +<<>>= +insane <- data.frame(Name=c("Ampersand","Greater than","Less than","Underscore","Per cent","Dollar","Backslash","Hash", "Caret", "Tilde","Left brace","Right brace"), + Character = I(c("&",">", "<", "_", "%", "$", "\\", "#", "^", "~","{","}"))) +colnames(insane)[2] <- paste(insane[,2],collapse="") +@ + +<>= +print( xtable(insane)) +@ +Sometimes you might want to have your own sanitization function +<<>>= +wanttex <- xtable(data.frame( label=paste("Value_is $10^{-",1:3,"}$",sep=""))) +@ +<>= +print(wanttex,sanitize.text.function=function(str)gsub("_","\\_",str,fixed=TRUE)) +@ + +\subsection{Markup in tables} + +Markup can be kept in tables, including column and row names, by using a custom sanitize.text.function: + +<<>>= +mat <- round(matrix(c(0.9, 0.89, 200, 0.045, 2.0), c(1, 5)), 4) +rownames(mat) <- "$y_{t-1}$" +colnames(mat) <- c("$R^2$", "$\\bar{R}^2$", "F-stat", "S.E.E", "DW") +mat <- xtable(mat) +@ +<>= +print(mat, sanitize.text.function = function(x){x}) +@ + +% By David Dahl to demonstrate contribution from David Whitting, 2007-10-09. +You can also have sanitize functions that are specific to column or row names. In the table below, the row name is not sanitized but column names and table elements are: +<<>>= +money <- matrix(c("$1,000","$900","$100"),ncol=3,dimnames=list("$\\alpha$",c("Income (US$)","Expenses (US$)","Profit (US$)"))) +@ +<>= +print(xtable(money),sanitize.rownames.function=function(x) {x}) +@ + +\section{Format examples} +\subsection{Adding a centering environment } +<>= + print(xtable(lm.D9,caption="\\tt latex.environment=NULL"),latex.environment=NULL) + print(xtable(lm.D9,caption="\\tt latex.environment=\"\""),latex.environment="") + print(xtable(lm.D9,caption="\\tt latex.environment=\"center\""),latex.environment="center") +@ +\subsection{Column alignment} + +<<>>= +tli.table <- xtable(tli[1:10,]) +@ +<<>>= +align(tli.table) <- rep("r",6) +@ +<>= +print(tli.table,floating=FALSE) +@ +\subsubsection{Single string and column lines} +<<>>= +align(tli.table) <- "|rrl|l|lr|" +@ +<>= +print(tli.table,floating=FALSE) +@ +\subsubsection{Fixed width columns} +<<>>= +align(tli.table) <- "|rr|lp{3cm}l|r|" +@ +<>= +print(tli.table,floating=FALSE) +@ + +\subsection{Significant digits} + + +Specify with a single argument +<<>>= +digits(tli.table) <- 3 +@ +<>= +print(tli.table,floating=FALSE,) +@ + + +or one for each column, counting the row names +<<>>= +digits(tli.table) <- 1:(ncol(tli)+1) +@ +<>= +print(tli.table,floating=FALSE,) +@ + + +or as a full matrix +<<>>= +digits(tli.table) <- matrix( 0:4, nrow = 10, ncol = ncol(tli)+1 ) +@ +<>= +print(tli.table,floating=FALSE,) +@ + +\subsection{Suppress row names} +<>= +print((tli.table),include.rownames=FALSE,floating=FALSE) +@ + +If you want a vertical line on the left, you need to change the align attribute. +<<>>= +align(tli.table) <- "|r|r|lp{3cm}l|r|" +@ +<>= +print((tli.table),include.rownames=FALSE,floating=FALSE) +@ + +Revert the alignment to what is was before. +<<>>= +align(tli.table) <- "|rr|lp{3cm}l|r|" +@ + +\subsection{Suppress column names} +<>= +print((tli.table),include.colnames=FALSE,floating=FALSE) +@ +\\ +Note the doubled header lines which can be suppressed with, eg, +<>= +print(tli.table,include.colnames=FALSE,floating=FALSE,hline.after=c(0,nrow(tli.table))) +@ + +\subsection{Suppress row and column names} +<>= +print((tli.table),include.colnames=FALSE,include.rownames=FALSE,floating=FALSE) +@ + +\subsection{Horizontal lines} +<>= +print(xtable(anova(glm.D93)),hline.after=c(1),floating=FALSE) +@ + +\subsection{Table-level \LaTeX} +<>= +print(xtable(anova(glm.D93)),size="small",floating=FALSE) +@ + + +\subsection{Long tables} +Remember to insert \verb|\usepackage{longtable}| in your LaTeX preamble. +See Table \ref{tabbig}. + +<>= + +## Demonstration of longtable support. +x <- matrix(rnorm(1000), ncol = 10) +x.big <- xtable(x,label='tabbig', + caption='Example of longtable spanning several pages') +@ +<>= +print(x.big,tabular.environment='longtable',floating=FALSE) +@ + + +\subsection{Sideways tables} +Remember to insert \verb|\usepackage{rotating}| in your LaTeX preamble. +Sideways tables can't be forced in place with the `H' specifier, but you can +use the \verb|\clearpage| command to get them fairly nearby. +See Table \ref{tabsmall}. + +<<>>= +x <- x[1:30,] +x.small <- xtable(x,label='tabsmall',caption='A sideways table') +@ + +<>= +print(x.small,floating.environment='sidewaystable') +@ +\clearpage + +\section{Acknowledgements} +Most of the examples in this gallery are taken from the {\tt xtable} documentation. +\section{R Session information} +<>= +toLatex(sessionInfo()) +@ +\end{document} diff --git a/pkg/man/print.xtable.Rd b/pkg/man/print.xtable.Rd new file mode 100644 index 0000000..21fb2ce --- /dev/null +++ b/pkg/man/print.xtable.Rd @@ -0,0 +1,57 @@ +\name{print.xtable} +\alias{print.xtable} +\title{Print Export Tables} +\description{Function returning and displaying or writing to disk the LaTeX or HTML code associated with the supplied object of class \code{xtable}.} +\usage{\method{print}{xtable}(x, type="latex", file="", append=FALSE, floating=TRUE, floating.environment="table", table.placement = "ht", caption.placement="bottom", latex.environments=c("center"),tabular.environment = "tabular", size=NULL,hline.after=c(-1,0,nrow(x)), NA.string = "", include.rownames=TRUE, include.colnames=TRUE, only.contents=FALSE, add.to.row=NULL, sanitize.text.function=NULL, sanitize.rownames.function=sanitize.text.function, sanitize.colnames.function=sanitize.text.function, math.style.negative=FALSE, html.table.attributes="border=1", ...)} +\arguments{ + \item{x}{An object of class \code{"xtable"}.} + \item{type}{Type of table to produce. Possible values for \code{type} are \code{"latex"} or \code{"html"}. + Default value is \code{"latex"}.} + \item{file}{Name of file where the resulting code should be saved. If \code{file=""}, output is displayed on screen. Note that + the function also (invisibly) returns a character vector of the results (which can be helpful for post-processing). + Default value is \code{""}.} + \item{append}{If \code{TRUE} and \code{file!=""}, code will be appended to \code{file} instead of overwriting \code{file}. + Default value is \code{FALSE}.} + \item{floating}{If \code{TRUE} and \code{type="latex"}, the resulting table will be a floating table (using, for example, \code{\\begin\{table\}} and \code{\\end\{table\}}). See \code{floating.environment} below. Default value is \code{TRUE}.} + \item{floating.environment}{If \code{floating=TRUE} and \code{type="latex"}, the resulting table uses the specified floating environment. + Possible values are \code{"table"} or \code{"sidewaystable"} (defined in the LaTeX package 'rotating'). + Default value is \code{"table"}.} + \item{table.placement}{If \code{floating=TRUE} and \code{type="latex"}, the floating table will have placement given by \code{table.placement} where \code{table.placement} must be \code{NULL} or contain only elements of \{"h","t","b","p","!","H"\}. + Default value is \code{"ht"}.} + \item{caption.placement}{The caption will be have placed at the bottom of the table if \code{caption.placement} is \code{"bottom"} and at the top of the table if it equals \code{"top"}. + Default value is \code{"bottom"}.} + \item{latex.environments}{If \code{floating=TRUE} and \code{type="latex"}, the specificed latex environments (provided as a character vector) will enclose the tabuluar environment. + Default value is \code{"center"}.} + \item{tabular.environment}{When \code{type="latex"}, the tabular environment that will be used. Defaults to \code{"tabular"}. When working with tables that extend more than one page, using \code{tabular.environment="longtable"} and the LaTeX package \code{"longtable"} (see Fairbairns, 2005) allows one to typeset them uniformly. Note that \code{"floating"} should be set to \code{"FALSE"} when using the \code{"longtable"} environment.} + \item{size}{An arbitrary character vector intended to be used to set the font size in a LaTeX table. The supplied value (if not \code{NULL}) is inserted just before the tabular environment starts. Default value is \code{NULL}.} + \item{hline.after}{When \code{type="latex"}, a vector of numbers between -1 and \code{"nrow(x)"}, inclusive, indicating the rows after which a horizontal line should appear. If \code{NULL} is used no lines are produced. Default value is \code{c(-1,0,nrow(x))} which means draw a line before and after the columns names and at the end of the table. Repeated values are allowed.} + \item{NA.string}{String to be used for missing values in table entries. Default value is \code{""}.} + \item{include.rownames}{logical. If \code{TRUE} the rows names is printed. Default value is \code{TRUE}.} + \item{include.colnames}{logical. If \code{TRUE} the columns names is printed. Default value is \code{TRUE}.} + \item{only.contents}{logical. If \code{TRUE} only the rows of the table is printed. Default value is \code{FALSE}.} + \item{add.to.row}{a list of two components. The first component (which should be called 'pos') is a list contains the position of rows on which extra commands should be added at the end, The second component (which should be called 'command') is a character vector of the same length of the first component which contains the command that should be added at the end of the specified rows. Default value is \code{NULL}, i.e. do not add commands.} + \item{sanitize.text.function}{All non-numeric enteries (except row and column names) are sanitised in an attempt to remove characters which have special meaning for the output format. If \code{sanitize.text.function} is not NULL (the default), it should be a function taking a character vector and returning one, and will be used for the sanitization instead of the default internal function.} + \item{sanitize.rownames.function}{Like the \code{sanitize.text.function}, but applicable to row names. The default uses the \code{sanitize.text.function}.} + \item{sanitize.colnames.function}{Like the \code{sanitize.text.function}, but applicable to column names. The default uses the \code{sanitize.text.function}.} + \item{math.style.negative}{In a LaTeX table, if \code{TRUE}, then use $-$ for the negative sign (as was the behavior prior to version 1.5-3). Default value is \code{FALSE}.} + \item{html.table.attributes}{In an HTML table, attributes associated with the \code{} tag. Default value is \code{border=1}.} + \item{...}{Additional arguments. (Currently ignored.)} +} +\details{ + This function displays or writes to disk the code to produce a table associated with an object \code{x} of class \code{"xtable"}. + The resulting code is either a LaTeX or HTML table, depending on the value of \code{type}. The function also (invisibly) returns a character vector + of the results (which can be helpful for post-processing). + + Since version 1.4 the non default behavior of \code{hline.after} is changed. To obtain the same results as the previous versions add to the \code{hline.after} vector the vector \code{c(-1, 0, nrow(x))} where \code{nrow(x)} is the numbers of rows of the object. + + From version 1.4-3, all non-numeric columns are sanitized, and all LaTeX special characters are sanitised for LaTeX output. See Section 3 of the \code{xtableGallery} vignette for an example of customising the sanitization. + From version 1.4-4, the sanitization also applies to column names. To remove any text sanitization, specify \code{sanitize.text.function=function(x){x}}. +} +\author{David Dahl \email{dahl@stat.tamu.edu} with contributions and suggestions from many others (see source code).} +\references{ + Fairbairns, Robin (2005) \emph{Tables longer than a single page} The UK List of TeX Frequently Asked Questions on the Web. \url{http://www.tex.ac.uk/cgi-bin/texfaq2html?label=longtab} +} +\seealso{\code{\link{xtable}}, \code{\link{caption}}, \code{\link{label}}, + \code{\link{align}}, \code{\link{digits}}, \code{\link{display}}, \code{\link{formatC}}} + +\keyword{print} diff --git a/pkg/man/string.Rd b/pkg/man/string.Rd new file mode 100644 index 0000000..f07fcf3 --- /dev/null +++ b/pkg/man/string.Rd @@ -0,0 +1,30 @@ +\name{string} +\alias{string} +\alias{print.string} +\alias{is.string} +\alias{as.string} +\alias{+.string} +\title{String handling functions} +\description{Private functions for conveniently working with strings.} +\usage{ + string(text,file="",append=FALSE) + \method{print}{string}(x,...) + \method{+}{string}(x,y) + as.string(x,file="",append=FALSE) + is.string(x) +} +\arguments{ + \item{text}{A character object.} + \item{file}{Name of the file that should receive the printed string.} + \item{append}{Should the printed string be appended to the file?} + \item{x}{A \code{string} object.} + \item{y}{A \code{string} object.} + \item{...}{Additional arguments. (Currently ignored.)} +} +\details{ + These functions are private functions used by \code{print.xtable}. They are + not intended to be used elsewhere. +} +\author{David Dahl \email{dahl@stat.tamu.edu} with contributions and suggestions from many others (see source code).} +\seealso{\code{\link{print.xtable}}} +\keyword{print} diff --git a/pkg/man/table.attributes.Rd b/pkg/man/table.attributes.Rd new file mode 100644 index 0000000..c109207 --- /dev/null +++ b/pkg/man/table.attributes.Rd @@ -0,0 +1,47 @@ +\name{table.attributes} +\alias{caption} +\alias{caption.xtable} +\alias{caption<-} +\alias{caption<-.xtable} +\alias{label} +\alias{label.xtable} +\alias{label<-} +\alias{label<-.xtable} +\alias{align} +\alias{align.xtable} +\alias{align<-} +\alias{align<-.xtable} +\alias{digits} +\alias{digits.xtable} +\alias{digits<-} +\alias{digits<-.xtable} +\alias{display} +\alias{display.xtable} +\alias{display<-} +\alias{display<-.xtable} +\title{Retrieve and Set Options for Export Tables} +\description{Functions retrieving or setting table attributes for the supplied object of class \code{"xtable"}.} +\usage{ + caption(x,...) + caption(x) <- value + label(x,...) + label(x) <- value + align(x,...) + align(x) <- value + digits(x,...) + digits(x) <- value + display(x,...) + display(x) <- value +} +\arguments{ + \item{x}{An \code{"xtable"} object.} + \item{value}{The value of the corresponding attribute.} + \item{...}{Additional arguments. (Currently ignored.)} +} +\details{ + These functions retrieve or set table attributes of the object \code{x} of class \code{"xtable"}. See + \code{xtable} for a description of the options. +} +\author{David Dahl \email{dahl@stat.tamu.edu} with contributions and suggestions from many others (see source code).} +\seealso{\code{\link{xtable}}, \code{\link{print.xtable}}, \code{\link{formatC}}} +\keyword{print} diff --git a/pkg/man/tli.Rd b/pkg/man/tli.Rd new file mode 100644 index 0000000..f6c2b43 --- /dev/null +++ b/pkg/man/tli.Rd @@ -0,0 +1,20 @@ +\name{tli} +\alias{tli} +\title{Math scores from Texas Assessment of Academic Skills (TAAS)} +\description{ +This data set contains math scores and demographic data of +100 randomly selected students participating in the Texas +Assessment of Academic Skills (TAAS). +} +\usage{data(tli)} +\format{A data.frame containing 100 observations with the following columns: + \describe{ + \item{\code{grade}}{Year in school of student} + \item{\code{sex}}{Gender of student} + \item{\code{disadvg}}{Is the student economically disadvantaged?} + \item{\code{ethnicty}}{Race of student} + \item{\code{tlimth}}{Math score of student} + } +} +\source{Texas Education Agency, \url{http://www.tea.state.tx.us}} +\keyword{datasets} diff --git a/pkg/man/xtable.Rd b/pkg/man/xtable.Rd new file mode 100644 index 0000000..ab9c7ca --- /dev/null +++ b/pkg/man/xtable.Rd @@ -0,0 +1,316 @@ +\name{xtable} +\alias{xtable} +\alias{xtable.anova} +\alias{xtable.aov} +\alias{xtable.aovlist} +\alias{xtable.data.frame} +\alias{xtable.glm} +\alias{xtable.lm} +\alias{xtable.matrix} +\alias{xtable.prcomp} +\alias{xtable.coxph} +\alias{xtable.summary.aov} +\alias{xtable.summary.aovlist} +\alias{xtable.summary.glm} +\alias{xtable.summary.lm} +\alias{xtable.summary.prcomp} +\alias{xtable.ts} +\alias{xtable.table} +\alias{xtable.zoo} +\title{Create Export Tables} +\description{Function converting an R object to an \code{xtable} object, which can then be printed as a LaTeX or HTML table.} +\usage{ +xtable(x, caption=NULL, label=NULL, align=NULL, digits=NULL, + display=NULL, ...) +} +\arguments{ + \item{x}{An R object of class found among \code{methods(xtable)}. See below on how to write additional method functions + for \code{xtable}.} + \item{caption}{Character vector of length 1 containing the table's caption or title. + Set to \code{NULL} to suppress the caption. Default value is \code{NULL}.} + \item{label}{Character vector of length 1 containing the LaTeX label or HTML anchor. + Set to \code{NULL} to suppress the label. Default value is \code{NULL}.} + \item{align}{Character vector of length equal to the number of columns of the resulting + table indicating the alignment of the corresponding columns. Also, \code{"|"} may be used + to produce vertical lines between columns in LaTeX tables, but these are effectively ignored + when considering the required length of the supplied vector. If a character vector of length one + is supplied, it is split as \code{strsplit(align,"")[[1]]} before processing. + Since the row names are printed in the first column, the length of \code{align} + is one greater than \code{ncol(x)} if \code{x} is a \code{data.frame}. + Use \code{"l"}, \code{"r"}, and \code{"c"} to denote left, right, and + center alignment, respectively. Use \code{"p\{3cm\}"} etc for a LaTeX column of the specified width. + For HTML output the \code{"p"} alignment is interpreted as \code{"l"}, ignoring + the width request. Default depends on the class of \code{x}.} + \item{digits}{Numeric vector of length equal to one (in which case it will be replicated as necessary) + or to the number of columns of the resulting + table \bold{or} matrix of the same size as the resulting table + indicating the number of digits to display in the corresponding columns. + Since the row names are printed in the first column, the length of the + vector \code{digits} or the number of columns of the matrix \code{digits} + is one greater than \code{ncol(x)} if \code{x} is a \code{data.frame}. + Default depends of class of \code{x}. + If values of \code{digits} are negative, the corresponding values + of \code{x} are displayed in scientific format with \code{abs(digits)} + digits.} + \item{display}{Character vector of length equal to the number of columns of the resulting + table indicating the format for the corresponding columns. + Since the row names are printed in the first column, the length of \code{display} + is one greater than \code{ncol(x)} if \code{x} is a \code{data.frame}. + These values are passed to the \code{formatC} function. Use \code{"d"} (for integers), + \code{"f"}, \code{"e"}, \code{"E"}, \code{"g"}, \code{"G"}, \code{"fg"} (for + reals), or \code{"s"} (for strings). + \code{"f"} gives numbers in the usual \code{xxx.xxx} format; \code{"e"} and + \code{"E"} give \code{n.ddde+nn} or \code{n.dddE+nn} (scientific format); + \code{"g"} and \code{"G"} put \code{x[i]} into scientific format only if it saves + space to do so. \code{"fg"} uses fixed format as \code{"f"}, but \code{digits} as + number of \emph{significant} digits. Note that this can lead to + quite long result strings. Default depends on the class of \code{x}.} + \item{...}{Additional arguments. (Currently ignored.)} +} +\details{ + This function extracts tabular information from \code{x} and returns an object of class \code{"xtable"}. + The nature of the table generated depends on the class of \code{x}. + For example, \code{aov} objects produce + ANOVA tables while \code{data.frame} objects produce a table of the entire data.frame. One can optionally provide a + caption (called a title in HTML) or label (called an anchor in HTML), + as well as formatting specifications. Default + values for \code{align}, \code{digits}, and \code{display} are + class dependent. + + The available method functions for \code{xtable} are given by \code{methods(xtable)}. + Users can extend the list of available classes by writing methods for the generic function \code{xtable}. + These methods functions should have \code{x} as their first argument + with additional arguments to + specify \code{caption}, \code{label}, \code{align}, + \code{digits}, and + \code{display}. Optionally, other arguments + may be present to specify how the object \code{x} should be manipulated. + All method functions should return an object whose class if given by \code{c("xtable","data.frame")}. + The resulting object can have attributes \code{caption} and + \code{label}, but must have attributes \code{align}, + \code{digits}, and \code{display}. It is strongly recommened that you set these attributes through the + provided replacement functions as they perform validity checks. +} +\value{ + An object of class \code{"xtable"} which inherits the \code{data.frame} class and contains several additional attributes + specifying the table formatting options. +} +\author{David Dahl \email{dahl@stat.tamu.edu} with contributions and suggestions from many others (see source code).} +\seealso{\code{\link{print.xtable}}, \code{\link{caption}}, \code{\link{label}}, + \code{\link{align}}, \code{\link{digits}}, \code{\link{display}}, \code{\link{formatC}}, \code{\link{methods}}} +\examples{ + +## Load example dataset +data(tli) + +## Demonstrate data.frame +tli.table <- xtable(tli[1:20,]) +digits(tli.table)[c(2,6)] <- 0 +print(tli.table) +print(tli.table,type="html") + +## Demonstrate data.frame with different digits in cells +tli.table <- xtable(tli[1:20,]) +digits(tli.table) <- matrix( 0:4, nrow = 20, ncol = ncol(tli)+1 ) +print(tli.table) +print(tli.table,type="html") + +## Demonstrate matrix +design.matrix <- model.matrix(~ sex*grade, data=tli[1:20,]) +design.table <- xtable(design.matrix) +print(design.table) +print(design.table,type="html") + +## Demonstrate aov +fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data=tli) +fm1.table <- xtable(fm1) +print(fm1.table) +print(fm1.table,type="html") + +## Demonstrate lm +fm2 <- lm(tlimth ~ sex*ethnicty, data=tli) +fm2.table <- xtable(fm2) +print(fm2.table) +print(fm2.table,type="html") +print(xtable(anova(fm2))) +print(xtable(anova(fm2)),type="html") +fm2b <- lm(tlimth ~ ethnicty, data=tli) +print(xtable(anova(fm2b,fm2))) +print(xtable(anova(fm2b,fm2)),type="html") + +## Demonstrate glm +fm3 <- glm(disadvg ~ ethnicty*grade, data=tli, family=binomial()) +fm3.table <- xtable(fm3) +print(fm3.table) +print(fm3.table,type="html") +print(xtable(anova(fm3))) +print(xtable(anova(fm3)),type="html") + +## Demonstrate aov +## Taken from help(aov) in R 1.1.1 +## From Venables and Ripley (1997) p.210. +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) +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) +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) +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, + 62.0,48.8,45.5,44.2,52.0,51.5,49.8,48.8,57.2,59.0,53.2,56.0) +npk <- data.frame(block=gl(6,4), N=factor(N), P=factor(P), K=factor(K), yield=yield) +npk.aov <- aov(yield ~ block + N*P*K, npk) +op <- options(contrasts=c("contr.helmert", "contr.treatment")) +npk.aovE <- aov(yield ~ N*P*K + Error(block), npk) +options(op) + +summary(npk.aov) +print(xtable(npk.aov)) +print(xtable(anova(npk.aov))) +print(xtable(summary(npk.aov))) + +summary(npk.aovE) +print(xtable(npk.aovE),type="html") +print(xtable(summary(npk.aovE)),type="html") + +## Demonstrate lm +## Taken from help(lm) in R 1.1.1 +## Annette Dobson (1990) "An Introduction to Generalized Linear Models". +## Page 9: Plant Weight Data. +ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14) +trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69) +group <- gl(2,10,20, labels=c("Ctl","Trt")) +weight <- c(ctl, trt) +lm.D9 <- lm(weight ~ group) +print(xtable(lm.D9)) +print(xtable(anova(lm.D9))) + +## Demonstrate glm +## Taken from help(glm) in R 1.1.1 +## Annette Dobson (1990) "An Introduction to Generalized Linear Models". +## Page 93: Randomized Controlled Trial : +counts <- c(18,17,15,20,10,20,25,13,12) +outcome <- gl(3,1,9) +treatment <- gl(3,3) +d.AD <- data.frame(treatment, outcome, counts) +glm.D93 <- glm(counts ~ outcome + treatment, family=poisson()) +print(xtable(glm.D93,align="r|llrc")) +print(xtable(anova(glm.D93)),hline.after=c(1),size="small") + +## Demonstration of longtable support. +## Remember to insert \usepackage{longtable} on your LaTeX preamble +x <- matrix(rnorm(1000), ncol = 10) +x.big <- xtable(x,label='tabbig',caption='Example of longtable spanning several pages') +print(x.big,tabular.environment='longtable',floating=FALSE) +x <- x[1:30,] +x.small <- xtable(x,label='tabsmall',caption='regular table env') +print(x.small) # default, no longtable + +## Demonstration of sidewaystable support. +## Remember to insert \usepackage{rotating} on your LaTeX preamble +print(x.small,floating.environment='sidewaystable') + +if(require(stats,quietly=TRUE)) { + ## Demonstrate prcomp + ## Taken from help(prcomp) in mva package of R 1.1.1 + data(USArrests) + pr1 <- prcomp(USArrests) + print(xtable(pr1)) + print(xtable(summary(pr1))) + +# ## Demonstrate princomp +# ## Taken from help(princomp) in mva package of R 1.1.1 +# pr2 <- princomp(USArrests) +# print(xtable(pr2)) +} + +## Demonstrate include.rownames, include.colnames, +## only.contents and add.to.row arguments +set.seed(2345) +res <- matrix(sample(0:9, size=6*9, replace=TRUE), ncol=6, nrow=9) +xres <- xtable(res) +digits(xres) <- rep(0, 7) +addtorow <- list() +addtorow$pos <- list() +addtorow$pos[[1]] <- c(0, 2) +addtorow$pos[[2]] <- 4 +addtorow$command <- c('\\vspace{2mm} \n', '\\vspace{10mm} \n') +print(xres, add.to.row=addtorow, include.rownames=FALSE, include.colnames=TRUE, only.contents=TRUE, hline.after=c(0, 0, 9, 9)) + +## Demostrate include.rownames, include.colnames, +## only.contents and add.to.row arguments in Rweave files + +\dontrun{ + \begin{small} + \setlongtables % For longtable version 3.x or less + \begin{longtable}{ + <>= + cat(paste(c('c', rep('cc', 34/2-1), 'c'), collapse='@{\\hspace{2pt}}')) + @ + } + \hline + \endhead + \hline + \endfoot + <>= + library(xtable) + set.seed(2345) + res <- matrix(sample(0:9, size=34*90, replace=TRUE), ncol=34, nrow=90) + xres <- xtable(res) + digits(xres) <- rep(0, 35) + addtorow <- list() + addtorow$pos <- list() + addtorow$pos[[1]] <- c(seq(4, 40, 5), seq(49, 85, 5)) + addtorow$pos[[2]] <- 45 + addtorow$command <- c('\\vspace{2mm} \n', '\\newpage \n') + print(xres, add.to.row=addtorow, include.rownames=FALSE, include.colnames=F ALSE, only.contents=TRUE, hline.after=NULL) + @ + \end{longtable} + \end{small} +} + +## Demonstrate sanitization +mat <- round(matrix(c(0.9, 0.89, 200, 0.045, 2.0), c(1, 5)), 4) +rownames(mat) <- "$y_{t-1}$" +colnames(mat) <- c("$R^2$", "$\\\bar{R}^2$", "F-stat", "S.E.E", "DW") +print(xtable(mat), type="latex", sanitize.text.function = function(x){x}) + +\testonly{ + for(i in c("latex","html")) { + outFileName <- paste("xtable.",ifelse(i=="latex","tex",i),sep="") + print(tli.table,type=i,file=outFileName,append=FALSE) + print(design.table,type=i,file=outFileName,append=TRUE) + print(fm1.table,type=i,file=outFileName,append=TRUE) + print(fm2.table,type=i,file=outFileName,append=TRUE) + print(fm2.table,type=i,file=outFileName,append=TRUE,math.style.negative=TRUE) + print(xtable(anova(fm2)),type=i,file=outFileName,append=TRUE) + print(xtable(anova(fm2b,fm2)),type=i,file=outFileName,append=TRUE) + print(fm3.table,type=i,file=outFileName,append=TRUE) + print(xtable(anova(fm3)),type=i,file=outFileName,append=TRUE) + print(xtable(npk.aov),type=i,file=outFileName,append=TRUE) + print(xtable(anova(npk.aov)),type=i,file=outFileName,append=TRUE) + print(xtable(summary(npk.aov)),type=i,file=outFileName,append=TRUE) + print(xtable(npk.aovE),type=i,file=outFileName,append=TRUE) + print(xtable(summary(npk.aovE)),type=i,file=outFileName,append=TRUE) + if(i=="latex") cat("\\\clearpage\n",file=outFileName,append=TRUE) + print(xtable(lm.D9),type=i,file=outFileName,append=TRUE,latex.environment=NULL) + print(xtable(lm.D9),type=i,file=outFileName,append=TRUE,latex.environment="") + print(xtable(lm.D9),type=i,file=outFileName,append=TRUE,latex.environment="center") + print(xtable(anova(lm.D9)),type=i,file=outFileName,append=TRUE) + print(xtable(glm.D93),type=i,file=outFileName,append=TRUE) + print(xtable(anova(glm.D93,test="Chisq")),type=i,file=outFileName,append=TRUE) + print(xtable(glm.D93,align="r|llrc"),include.rownames=FALSE,include.colnames=TRUE,type=i,file=outFileName,append=TRUE) + print(xtable(glm.D93,align="r||llrc"),include.rownames=TRUE,include.colnames=FALSE,type=i,file=outFileName,append=TRUE) + print(xtable(glm.D93,align="|r||llrc"),include.rownames=FALSE,include.colnames=FALSE,type=i,file=outFileName,append=TRUE) + print(xtable(glm.D93,align="|r||llrc|"),type=i,file=outFileName,append=TRUE) + print(xtable(anova(glm.D93)),hline.after=c(1),size="small",type=i,file=outFileName,append=TRUE) + if(require(stats,quietly=TRUE)) { + print(xtable(pr1),type=i,file=outFileName,append=TRUE) + print(xtable(summary(pr1)),type=i,file=outFileName,append=TRUE) + # print(xtable(pr2),type=i,file=outFileName,append=TRUE) + } + temp.table <- xtable(ts(cumsum(1+round(rnorm(100), 2)), start = c(1954, 7), frequency=12)) + caption(temp.table) <- "Time series example" + print(temp.table,type=i,file=outFileName,append=TRUE,caption.placement="top",table.placement="h") + print(temp.table,type=i,file=outFileName,append=TRUE,caption.placement="bottom",table.placement="htb") + } +} + +} +\keyword{file} -- 2.39.5