]> git.donarmstrong.com Git - xtable.git/blobdiff - pkg/R/xtableList.R
Extracted sanitize functions and exported them
[xtable.git] / pkg / R / xtableList.R
index f0fb6d6a1da82a083539335bf02b04ebd5629a67..d49700c6162e0b2626b14e8b9916991884bbadf6 100644 (file)
@@ -1,6 +1,6 @@
 ### Function to create lists of tables\r
 xtableList <- function(x, caption = NULL, label = NULL, align = NULL,\r
-                              digits = NULL, display = NULL, ...) {\r
+                       digits = NULL, display = NULL, ...) {\r
   if (is.null(digits)){\r
     digitsList <- vector("list", length(x))\r
   } else {\r
@@ -69,125 +69,131 @@ print.xtableList <- function(x,
   ...)\r
 {\r
   ## Get number of rows for each table in list of tables\r
-  if (booktabs){\r
-    tRule <- "\\toprule"\r
-    mRule <- "\\midrule"\r
-    bRule <- "\\bottomrule"\r
-  } else {\r
-    tRule <- "\\hline"\r
-    mRule <- "\\hline"\r
-    bRule <- "\\hline"\r
-  }\r
   nCols <- dim(x[[1]])[2]\r
   rowNums <- sapply(x, dim)[1,]\r
   combinedRowNums <- cumsum(rowNums)\r
   combined <- do.call(rbind, x)\r
-  if (colnames.format == "single"){\r
-    add.to.row <- list(pos = NULL, command = NULL)\r
-    add.to.row$pos <- as.list(c(0, combinedRowNums[-length(x)],\r
-                                dim(combined)[1]))\r
-    command <- sapply(x, attr, "subheading")\r
-\r
-    add.to.row$command[1:length(x)] <-\r
-      paste0(mRule,"\n\\multicolumn{", nCols, "}{l}{", command, "}\\\\\n")\r
-    if ( (booktabs) & length(attr(x, "message") > 0) ){\r
-      attr(x, "message")[1] <-\r
-        paste0("\\rule{0em}{2.5ex}", attr(x, "message")[1])\r
-    }\r
-    add.to.row$command[length(x) + 1] <-\r
-      paste0("\n\\multicolumn{", nCols, "}{l}{", attr(x, "message"), "}\\\\\n",\r
-             collapse = "")\r
-    add.to.row$command[length(x) + 1] <-\r
-      paste0(bRule, add.to.row$command[length(x) + 1])\r
-\r
-    class(combined) <- c("xtableList", "data.frame")\r
-    hline.after <- c(-1)\r
-    include.colnames <- TRUE\r
-  }\r
-\r
-  ## Create headings for columns if multiple headings are needed\r
-  if (colnames.format == "multiple"){\r
-    if (is.null(sanitize.colnames.function)) {\r
-      colHead <- names(x[[1]])\r
+  if (type == "latex"){\r
+    ## Special treatment if using booktabs\r
+    if (booktabs){\r
+      tRule <- "\\toprule"\r
+      mRule <- "\\midrule"\r
+      bRule <- "\\bottomrule"\r
     } else {\r
-      colHead <- sanitize.colnames.function(names(x[[1]]))\r
+      tRule <- "\\hline"\r
+      mRule <- "\\hline"\r
+      bRule <- "\\hline"\r
     }\r
-    if (rotate.colnames) {\r
-      colHead <- paste("\\begin{sideways}", colHead, "\\end{sideways}")\r
+    if (colnames.format == "single"){\r
+      add.to.row <- list(pos = NULL, command = NULL)\r
+      add.to.row$pos <- as.list(c(0, combinedRowNums[-length(x)],\r
+                                  dim(combined)[1]))\r
+      command <- sapply(x, attr, "subheading")\r
+      \r
+      add.to.row$command[1:length(x)] <-\r
+        paste0(mRule,"\n\\multicolumn{", nCols, "}{l}{", command, "}\\\\\n")\r
+      if ( (booktabs) & length(attr(x, "message") > 0) ){\r
+        attr(x, "message")[1] <-\r
+          paste0("\\rule{0em}{2.5ex}", attr(x, "message")[1])\r
+      }\r
+      add.to.row$command[length(x) + 1] <-\r
+        paste0("\n\\multicolumn{", nCols, "}{l}{",\r
+               attr(x, "message"), "}\\\\\n",\r
+               collapse = "")\r
+      add.to.row$command[length(x) + 1] <-\r
+        paste0(bRule, add.to.row$command[length(x) + 1])\r
+      \r
+      class(combined) <- c("xtableList", "data.frame")\r
+      hline.after <- c(-1)\r
+      include.colnames <- TRUE\r
     }\r
-    colHead <- paste0(colHead, collapse = " & ")\r
-    if (include.rownames) {\r
-      colHead <- paste0(" & ", colHead)\r
-    }\r
-    colHead <- paste0(tRule, "\n", colHead, " \\\\", mRule, "\n")\r
-    add.to.row <- list(pos = NULL, command = NULL)\r
-    add.to.row$pos <- as.list(c(0, c(combinedRowNums[1:length(x)])))\r
-    command <- sapply(x, attr, "subheading")\r
-    add.to.row$command[1] <-\r
-      paste0("\n\\multicolumn{", nCols, "}{l}{", command[1], "}", " \\\\ \n",\r
-             colHead)\r
-    add.to.row$command[2:length(x)] <-\r
-      paste0(bRule,\r
-             "\\\\ \n\\multicolumn{", nCols, "}{l}{",\r
-             command[2:length(x)], "}",\r
-             "\\\\ \n",\r
-             colHead)\r
-    if ( (booktabs) & length(attr(x, "message") > 0) ){\r
-      attr(x, "message")[1] <-\r
-        paste0("\\rule{0em}{2.5ex}", attr(x, "message")[1])\r
-    }\r
-    add.to.row$command[length(x) + 1] <-\r
-      paste0("\n\\multicolumn{", nCols, "}{l}{", attr(x, "message"), "}\\\\\n",\r
-             collapse = "")\r
-    add.to.row$command[length(x) + 1] <-\r
-      paste0(bRule, add.to.row$command[length(x) + 1])\r
 \r
-    class(combined) <- c("xtableList", "data.frame")\r
-    hline.after <- NULL\r
-\r
-    include.colnames <- FALSE\r
+    ## Create headings for columns if multiple headings are needed\r
+    if (colnames.format == "multiple"){\r
+      if (is.null(sanitize.colnames.function)) {\r
+        colHead <- names(x[[1]])\r
+      } else {\r
+        colHead <- sanitize.colnames.function(names(x[[1]]))\r
+      }\r
+      if (rotate.colnames) {\r
+        colHead <- paste("\\begin{sideways}", colHead, "\\end{sideways}")\r
+      }\r
+      colHead <- paste0(colHead, collapse = " & ")\r
+      if (include.rownames) {\r
+        colHead <- paste0(" & ", colHead)\r
+      }\r
+      colHead <- paste0(tRule, "\n", colHead, " \\\\", mRule, "\n")\r
+      add.to.row <- list(pos = NULL, command = NULL)\r
+      add.to.row$pos <- as.list(c(0, c(combinedRowNums[1:length(x)])))\r
+      command <- sapply(x, attr, "subheading")\r
+      add.to.row$command[1] <-\r
+        paste0("\n\\multicolumn{", nCols, "}{l}{", command[1], "}", " \\\\ \n",\r
+               colHead)\r
+      add.to.row$command[2:length(x)] <-\r
+        paste0(bRule,\r
+               "\\\\ \n\\multicolumn{", nCols, "}{l}{",\r
+               command[2:length(x)], "}",\r
+               "\\\\ \n",\r
+               colHead)\r
+      if ( (booktabs) & length(attr(x, "message") > 0) ){\r
+        attr(x, "message")[1] <-\r
+          paste0("\\rule{0em}{2.5ex}", attr(x, "message")[1])\r
+      }\r
+      add.to.row$command[length(x) + 1] <-\r
+        paste0("\n\\multicolumn{", nCols, "}{l}{",\r
+               attr(x, "message"), "}\\\\\n",\r
+               collapse = "")\r
+      add.to.row$command[length(x) + 1] <-\r
+        paste0(bRule, add.to.row$command[length(x) + 1])\r
+      \r
+      class(combined) <- c("xtableList", "data.frame")\r
+      hline.after <- NULL\r
+      \r
+      include.colnames <- FALSE\r
+    }\r
+    \r
+    print.xtable(combined,\r
+                 type = type,\r
+                 floating = floating,\r
+                 floating.environment = floating.environment,\r
+                 table.placement = table.placement,\r
+                 caption.placement = caption.placement,\r
+                 caption.width = caption.width,\r
+                 latex.environments = latex.environments,\r
+                 tabular.environment = tabular.environment,\r
+                 size = size,\r
+                 hline.after = hline.after,\r
+                 NA.string = NA.string,\r
+                 include.rownames = include.rownames,\r
+                 include.colnames = include.colnames,\r
+                 only.contents = only.contents,\r
+                 add.to.row = add.to.row,\r
+                 sanitize.text.function = sanitize.text.function,\r
+                 sanitize.rownames.function = sanitize.rownames.function,\r
+                 sanitize.colnames.function = sanitize.colnames.function,\r
+                 math.style.negative = math.style.negative,\r
+                 html.table.attributes = html.table.attributes,\r
+                 print.results = print.results,\r
+                 format.args = format.args,\r
+                 rotate.rownames = rotate.rownames,\r
+                 rotate.colnames = rotate.colnames,\r
+                 booktabs = booktabs,\r
+                 scalebox = scalebox,\r
+                 width = width,\r
+                 comment = comment,\r
+                 timestamp = timestamp,\r
+                 ...)\r
+  } else {\r
+    stop("print.xtableList not yet implemented for this type")\r
   }\r
-\r
-  print.xtable(combined,\r
-               type = type,\r
-               floating = floating,\r
-               floating.environment = floating.environment,\r
-               table.placement = table.placement,\r
-               caption.placement = caption.placement,\r
-               caption.width = caption.width,\r
-               latex.environments = latex.environments,\r
-               tabular.environment = tabular.environment,\r
-               size = size,\r
-               hline.after = hline.after,\r
-               NA.string = NA.string,\r
-               include.rownames = include.rownames,\r
-               include.colnames = include.colnames,\r
-               only.contents = only.contents,\r
-               add.to.row = add.to.row,\r
-               sanitize.text.function = sanitize.text.function,\r
-               sanitize.rownames.function = sanitize.rownames.function,\r
-               sanitize.colnames.function = sanitize.colnames.function,\r
-               math.style.negative = math.style.negative,\r
-               html.table.attributes = html.table.attributes,\r
-               print.results = print.results,\r
-               format.args = format.args,\r
-               rotate.rownames = rotate.rownames,\r
-               rotate.colnames = rotate.colnames,\r
-               booktabs = booktabs,\r
-               scalebox = scalebox,\r
-               width = width,\r
-               comment = comment,\r
-               timestamp = timestamp,\r
-               ...)\r
-\r
 }\r
 \r
 \r
 ### Uses xtableList\r
 xtableLSMeans <- function(x, caption = NULL, label = NULL,\r
-                           align = NULL, digits = NULL,\r
-                           display = NULL, auto = FALSE,\r
-                           ...){\r
+                          align = NULL, digits = NULL,\r
+                          display = NULL, auto = FALSE,\r
+                          ...){\r
   if (attr(x, "estName") == "lsmean"){\r
     xList <- split(x, f = x[, 2])\r
     for (i in 1:length(xList)){\r
@@ -202,8 +208,8 @@ xtableLSMeans <- function(x, caption = NULL, label = NULL,
   } else {\r
     xList <- x\r
     xList <- xtable.data.frame(xList, caption = caption, label = label,\r
-                           align = align, digits = digits,\r
-                           display = display, auto = auto, ...)\r
+                               align = align, digits = digits,\r
+                               display = display, auto = auto, ...)\r
   }\r
   return(xList)\r
 }\r