R/latex-xtable.R

Defines functions TabularXtableHeader LongtableXtableHeader GenericXtableSetAttributes

Documented in GenericXtableSetAttributes LongtableXtableHeader TabularXtableHeader

#' Set the attributes for a generic xtable object
#'
#' This function helps you to set the attributes for an xtable
#' object. It returns an xtable object.
#'
#' @param xtobject      the xtable (table)
#' @param nxtnames      vector of names (column names)
#' @param nxtdigits     vector of digits (0 if column is non-numeric, numeric of desired number of digits otherwise)
#' @param nxtdisplay    vector of display format [see formatC(format=...)]
#' @param nxtalign      vector of LaTeX align (e.g., "l", "c", "r", "S[table-format=1.1]", ...)
#' @param caption.text  string for the LaTeX caption text
#' @param caption.label string for the LaTeX reference label
#'
#' @details
#' Sets names, digits, display, and align for the passed xtable object
#'
#' @return xtable object
#' @export
#'
#' @examples
#' \dontrun{
#' xtabWithAttributes <- GenericXtableSetAttributes(xtobject)
#' xtabWithAttributes <- GenericXtableSetAttributes(xtobject, nxtdigits = c(0, 2, 2, 4))
#' }
GenericXtableSetAttributes <- function(xtobject,
                                       nxtnames = NULL,
                                       nxtdigits = NULL,
                                       nxtdisplay = NULL,
                                       nxtalign = NULL,
                                       caption.text = "nxtcaption",
                                       caption.label = "tab:nxtlabel") {

   # remember to put all names inside "{}" if you use siunitx
   if (!is.null(nxtnames))   {names(xtobject)   <- nxtnames}
   # the prepended column due to "row.names"
   if (!is.null(nxtdigits))  {xtable::digits(xtobject)  <- c(0, nxtdigits)}
   if (!is.null(nxtdisplay)) {xtable::display(xtobject) <- c("s", nxtdisplay)}
   if (!is.null(nxtalign))   {xtable::align(xtobject)   <- c("l", nxtalign)}
   xtable::caption(xtobject) <- caption.text
   xtable::label(xtobject) <- caption.label
   #
   return (xtobject)
}


#' Set xtable header in LaTeX longtable format
#'
#' This function creates a longtable header assuming
#' that the LaTeX document will use the booktabs package.
#' This function should not be used together with \code{booktabs = TRUE}
#'
#' @param xtobject        xtable object (table)
#' @param caption.text    string for the LaTeX caption text
#' @param caption.label   string for the LaTeX reference label
#'
#' @return character string (with LaTeX escaping)
#' @export
LongtableXtableHeader <- function(xtobject, caption.text, caption.label) {
   ltxt.header <-
      paste(paste("\\caption{", caption.text, "}", sep = "", collapse = ""),
            paste("\\label{", caption.label, "}\\\\ ", sep = "", collapse = ""),
            "\\toprule ",
            attr(xtobject, "names")[1],
            paste(" &", attr(xtobject, "names")[2:length(attr(xtobject, "names"))], collapse = ""),
            "\\\\\\midrule ",
            "\\endfirsthead ",
            paste("\\multicolumn{",
                  ncol(xtobject),
                  "}{c}{{\\tablename\\ \\thetable{} -- continued from previous page}}\\\\ ",
                  sep = ""),
            "\\toprule ",
            attr(xtobject, "names")[1],
            paste("&", attr(xtobject, "names")[2:length(attr(xtobject, "names"))], collapse = ""),
            "\\\\\\midrule ",
            "\\endhead ",
            "\\midrule ",
            paste("\\multicolumn{",
                  as.character(ncol(xtobject)),
                  "}{r}{{Continued on next page}}\\\\ ",
                  sep = "", collapse = ""),
            "\\bottomrule \\endfoot ",
            "\\bottomrule \\endlastfoot ",
            collapse = "")
   return(ltxt.header)
}


#' Set xtable header in LaTeX tabular format
#'
#' This function should be used together with \code{booktabs = TRUE}.
#'
#' @param xtobject       xtable object (table)
#' @param names.custom   Use \code{names.custom} to make more complicated headers, e.g., multiple-row
#'
#' @return character string (with LaTeX escaping)
#' @export
TabularXtableHeader <- function(xtobject, names.custom = NULL) {
   if (is.null(names.custom)) {
      txt.header <-
         paste(attr(xtobject, "names")[1],
               paste(" &", attr(xtobject, "names")[2:length(attr(xtobject, "names"))], collapse = ""),
               "\\\\\n")
   } else {
      txt.header <- names.custom
   }
   return(txt.header)
}
chepec/R-common documentation built on July 27, 2023, 11:33 a.m.