xtable                package:xtable                R Documentation

_C_r_e_a_t_e _E_x_p_o_r_t _T_a_b_l_e_s

_D_e_s_c_r_i_p_t_i_o_n:

     Function converting an R object to an 'xtable' object, which can
     then be printed as a LaTeX or HTML table.

_U_s_a_g_e:

     xtable(x, caption=NULL, label=NULL, align=NULL, digits=NULL,
            display=NULL, ...)

_A_r_g_u_m_e_n_t_s:

       x: An R object of class found among 'methods(xtable)'.  See
          below on how to write additional method functions for
          'xtable'.

 caption: Character vector of length 1 containing the table's caption
          or title. Set to 'NULL' to suppress the caption.  Default
          value is 'NULL'.

   label: Character vector of length 1 containing the LaTeX label or
          HTML anchor. Set to 'NULL' to suppress the label.  Default
          value is 'NULL'.

   align: Character vector of length equal to the number of columns of
          the resulting table indicating the alignment of the
          corresponding columns.  Also, '"|"' 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 'strsplit(align,"")[[1]]' before
          processing. Since the row names are printed in the first
          column, the length of 'align' is one greater than 'ncol(x)'
          if 'x' is a 'data.frame'. Use '"l"', '"r"', and '"c"' to
          denote left, right, and center alignment, respectively.  Use
          '"p{3cm}"' etc for a LaTeX column of the specified width. For
          HTML output the '"p"' alignment is interpreted as '"l"',
          ignoring the width request. Default depends on the class of
          'x'.

  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 *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 'digits' or
          the number of columns of the matrix 'digits' is one greater
          than 'ncol(x)' if 'x' is a 'data.frame'. Default depends of
          class of 'x'. If values of 'digits' are negative, the
          corresponding values  of 'x' are displayed in scientific
          format with 'abs(digits)' digits.

 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 'display' is one greater than
          'ncol(x)' if 'x' is a 'data.frame'. These values are passed
          to the 'formatC' function.  Use '"d"' (for integers), '"f"',
          '"e"', '"E"', '"g"', '"G"', '"fg"' (for reals), or '"s"' (for
          strings). '"f"' gives numbers in the usual 'xxx.xxx' format; 
          '"e"' and '"E"' give 'n.ddde+nn' or 'n.dddE+nn' (scientific
          format); '"g"' and '"G"' put 'x[i]' into scientific format
          only if it saves space to do so.  '"fg"' uses fixed format as
          '"f"', but 'digits' as number of _significant_ digits.  Note
          that this can lead to quite long result strings.  Default
          depends on the class of 'x'.

     ...: Additional arguments.  (Currently ignored.)

_D_e_t_a_i_l_s:

     This function extracts tabular information from 'x' and returns an
     object of class '"xtable"'. The nature of the table generated
     depends on the class of 'x'. For example, 'aov' objects produce
     ANOVA tables while '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 'align', 'digits',
     and 'display' are class dependent.

     The available method functions for 'xtable' are given by
     'methods(xtable)'. Users can extend the list of available classes
     by writing methods for the generic function 'xtable'. These
     methods functions should have 'x' as their first argument with
     additional arguments to specify 'caption', 'label', 'align',
     'digits', and 'display'.  Optionally, other arguments may be
     present to specify how the object 'x' should be manipulated. All
     method functions should return an object whose class if given by
     'c("xtable","data.frame")'. The resulting object can have
     attributes 'caption' and 'label', but must have attributes
     'align', 'digits', and 'display'.  It is strongly recommened that
     you set these attributes through the  provided replacement
     functions as they perform validity checks.

_V_a_l_u_e:

     An object of class '"xtable"' which inherits the 'data.frame'
     class and contains several additional attributes specifying the
     table formatting options.

_A_u_t_h_o_r(_s):

     David Dahl dahl@stat.tamu.edu with contributions and suggestions
     from many others (see source code).

_S_e_e _A_l_s_o:

     'print.xtable', 'caption', 'label', 'align', 'digits', 'display',
     'formatC', 'methods'

_E_x_a_m_p_l_e_s:

     ## 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

     ## Not run: 
      \begin{small}
      \setlongtables
      \begin{longtable}{
      <<results=tex,fig=FALSE>>=
      cat(paste(c('c', rep('cc', 34/2-1), 'c'), collapse='@{\hspace{2pt}}'))
      @ 
      }
      \hline
      \endhead
      \hline
      \endfoot
      <<results=tex,fig=FALSE>>=
      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}
     ## End(Not run)

     ## 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})

      

