### ftable objects, requested by Charles Roosen ### Feature request #2248, 2/9/2012 xtableFtable <- function(x, caption = NULL, label = NULL, align = NULL, digits = NULL, display = NULL, quote = TRUE, method = c("non.compact", "row.compact", "col.compact", "compact"), lsep = " | ", ...) { method <- match.arg(method) saveMethod <- method xDim <- dim(x) nRowVars <- length(attr(x, "row.vars")) nColVars <- length(attr(x, "col.vars")) if (nRowVars ==0){ if (method =="col.compact"){ method <- "non.compact" } else if (method == "compact"){ method <- "row.compact" } } if (nColVars ==0){ if (method =="row.compact"){ method <- "non.compact" } else if (method == "compact"){ method <- "col.compact" } } if (method == "non.compact"){ nCharCols <- nRowVars + 1 nCharRows <- nColVars + 1 } if (method == "row.compact"){ nCharCols <- nRowVars + 1 nCharRows <- nColVars } if (method == "col.compact"){ nCharCols <- nRowVars nCharRows <- nColVars + 1 } if (method == "compact"){ nCharCols <- nRowVars nCharRows <- nColVars } if(is.null(align)) align <- c(rep("l", nCharCols), rep("r", xDim[2])) if(is.null(display)) { display <- c(rep("s", nCharCols), rep("d", xDim[2])) } attr(x, "ftableCaption") <- caption attr(x, "ftableLabel") <- label attr(x, "ftableAlign") <- align attr(x, "ftableDigits") <- digits attr(x, "quote") <- quote attr(x, "ftableDisplay") <- display attr(x, "method") <- method attr(x, "lsep") <- lsep attr(x, "nChars") <- c(nCharRows, nCharCols) class(x) <- c("xtableFtable", "ftable") return(x) } print.xtableFtable <- function(x, type = getOption("xtable.type", "latex"), file = getOption("xtable.file", ""), append = getOption("xtable.append", FALSE), floating = getOption("xtable.floating", TRUE), floating.environment = getOption("xtable.floating.environment", "table"), table.placement = getOption("xtable.table.placement", "ht"), caption.placement = getOption("xtable.caption.placement", "bottom"), caption.width = getOption("xtable.caption.width", NULL), latex.environments = getOption("xtable.latex.environments", c("center")), tabular.environment = getOption("xtable.tabular.environment", "tabular"), size = getOption("xtable.size", NULL), hline.after = getOption("xtable.hline.after", NULL), NA.string = getOption("xtable.NA.string", ""), only.contents = getOption("xtable.only.contents", FALSE), add.to.row = getOption("xtable.add.to.row", NULL), sanitize.rownames.function = getOption("xtable.sanitize.rownames.function", sanitize.text.function), sanitize.colnames.function = getOption("xtable.sanitize.colnames.function", sanitize.text.function), math.style.negative = getOption("xtable.math.style.negative", FALSE), math.style.exponents = getOption("xtable.math.style.exponents", FALSE), html.table.attributes = getOption("xtable.html.table.attributes", "border=1"), print.results = getOption("xtable.print.results", TRUE), format.args = getOption("xtable.format.args", NULL), rotate.rownames = getOption("xtable.rotate.rownames", FALSE), rotate.colnames = getOption("xtable.rotate.colnames", FALSE), booktabs = getOption("xtable.booktabs", FALSE), scalebox = getOption("xtable.scalebox", NULL), width = getOption("xtable.width", NULL), comment = getOption("xtable.comment", TRUE), timestamp = getOption("xtable.timestamp", date()), ...) { if (type == "latex"){ caption <- attr(x, "ftableCaption") label <- attr(x, "ftableLabel") align <- attr(x, "ftableAlign") digits <- attr(x, "ftableDigits") quote <- attr(x, "quote") digits <- attr(x, "ftabelDigits") method <- attr(x, "method") lsep <- attr(x, "lsep") nCharRows <- attr(x, "nChars")[1] fmtFtbl <- stats:::format.ftable(x, quote = quote, digits = digits, method = method, lsep = lsep) attr(fmtFtbl, "caption") <- caption attr(fmtFtbl, "label") <- label attr(fmtFtbl, "align") <- align attr(fmtFtbl, "digits") <- digits attr(fmtFtbl, "quote") <- quote attr(fmtFtbl, "display") <- display print.xtable(fmtFtbl, hline.after = c(-1, nCharRows, dim(fmtFtbl)[1]), include.rownames = FALSE, include.colnames = FALSE) } else { stop("print.xtableFtable not yet implemented for this type") } }