--- title: "Table Export" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Table Export} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", message = FALSE, warning = FALSE, eval = FALSE ) old_opts <- options(width = 180) ``` Publication requires tables in specific formats: PDF for static outputs, Word documents for collaborative drafting, LaTeX for manuscript preparation, HTML for web supplements, PowerPoint for presentations, and RTF for broad compatability. The `summata` package provides export functions for each format, with consistent parameters across formats and format-specific options where needed. | Function | Format | Dependencies | |:---------|:-------|:-------------| | `data.table::fwrite()` | CSV / TSV | `data.table` | | `table2pdf()` | PDF | `xtable`, LaTeX distribution | | `table2docx()` | Microsoft Word (.docx) | `flextable`, `officer` | | `table2html()` | HTML | `xtable` | | `table2pptx()` | PowerPoint (.pptx) | `flextable`, `officer` | | `table2tex()` | LaTeX source (.tex) | `xtable` | | `table2rtf()` | Rich Text Format (.rtf) | `flextable` | | `autotable()` | Auto-detect from extension | Varies | For delimited text formats (CSV, TSV), tables can be written directly with `data.table::fwrite()` since all `summata` output tables are `data.table` objects. For formatted document output, these functions follow a standard syntax when called: ``` r result <- autotable(data, "output.pdf", ...) ``` where `data` is the dataset, and `"output.pdf"` is the name of the destination file. This vignette demonstrates the various capabilities of these functions using the included sample dataset. --- # Preliminaries The examples in this vignette create sample tables using `summata` functions: ```{r setup, eval = TRUE} library(summata) data(clintrial) data(clintrial_labels) # Create sample tables for export table1 <- desctable( data = clintrial, by = "treatment", variables = c("age", "sex", "bmi", "smoking", "stage", "ecog"), labels = clintrial_labels ) table2 <- fullfit( data = clintrial, outcome = "surgery", predictors = c("age", "sex", "stage", "treatment", "ecog"), model_type = "glm", labels = clintrial_labels ) table3 <- fullfit( data = clintrial, outcome = "Surv(os_months, os_status)", predictors = c("age", "sex", "stage", "treatment", "ecog"), model_type = "coxph", labels = clintrial_labels ) table4 <- compfit( data = clintrial, outcome = "surgery", model_list = list( "Demographics" = c("age", "sex"), "Clinical" = c("age", "sex", "stage", "ecog"), "Full" = c("age", "sex", "stage", "ecog", "treatment") ), model_type = "glm" ) ``` --- # CSV / TSV Export All `summata` output tables are `data.table` objects, so they can be written to delimited text files directly with `data.table::fwrite()`. This is the simplest export path and requires no additional dependencies beyond `data.table`, which `summata` already imports. ## **Example 1:** CSV Export ```{r} data.table::fwrite(table1, file.path(tempdir(), "Table1.csv")) ``` ## **Example 2:** TSV Export Specify a tab delimiter for TSV output: ```{r} data.table::fwrite(table1, file.path(tempdir(), "Table1.tsv"), sep = "\t") ``` ## **Example 3:** Semicolon-Delimited (European Locale) Use a semicolon delimiter for compatibility with locales where the comma is the decimal separator: ```{r} data.table::fwrite(table1, file.path(tempdir(), "Table1.csv"), sep = ";") ``` CSV and TSV files are useful for archiving raw table output, importing into spreadsheet software, or downstream processing in other statistical environments. For formatted, publication-ready output, use the export functions described in the sections that follow. --- # PDF Export The `table2pdf()` function creates PDF documents using LaTeX typesetting via the `xtable` package. A LaTeX distribution (TinyTeX, TeX Live, MiKTeX, or MacTeX) is required. ## **Example 4:** Basic Export The simplest usage requires only a table and filename: ```{r} table2pdf( table = table1, file = file.path(tempdir(), "Table1.pdf") ) ``` ## **Example 5:** With Caption Add a caption using the `caption` parameter: ```{r} table2pdf( table = table1, file = file.path(tempdir(), "Table1.pdf"), caption = "Table 1. Baseline Characteristics by Group" ) ``` ## **Example 6:** With Formatting Options Multiple formatting options can be combined: ```{r} table2pdf( table = table2, file = file.path(tempdir(), "Table2.pdf"), caption = "Table 2. Regression Analysis", font_size = 8, bold_significant = TRUE, p_threshold = 0.05, indent_groups = TRUE, variable_padding = TRUE, zebra_stripes = TRUE ) ``` ## **Example 7:** Page Layout Control page size and orientation: ```{r} table2pdf( table = table2, file = file.path(tempdir(), "Table2_Landscape.pdf"), caption = "Table 2. Regression Results", paper = "letter", orientation = "landscape" ) ``` ## **Example 8:** Custom Margins Adjust page margins (in inches): ```{r} table2pdf( table = table2, file = file.path(tempdir(), "Table2_Margins.pdf"), margins = c(0.5, 0.5, 0.5, 0.5) # top, right, bottom, left ) ``` ## **Example 9:** Fit to Page Width Scale tables to fit the page width: ```{r} table2pdf( table = table2, file = file.path(tempdir(), "Table2_Fitted.pdf"), fit_to_page = TRUE ) ``` ## **Example 10:** Standalone Table Standalone settings are useful for embedding tables in larger documents: ```{r} table2pdf( table = table2, file = file.path(tempdir(), "Table2_Auto.pdf"), paper = "auto" ) ``` --- # Microsoft Word Export The `table2docx()` function creates editable Word documents using the `flextable` and `officer` packages. ## **Example 11:** Basic Export The simplest usage requires only a table and filename: ```{r} table2docx( table = table1, file = file.path(tempdir(), "Table1.docx") ) ``` ## **Example 12:** With Caption Add a caption using the `caption` parameter: ```{r} table2docx( table = table1, file = file.path(tempdir(), "Table1.docx"), caption = "Table 1. Baseline Characteristics by Group" ) ``` ## **Example 13:** With Formatting Options Multiple formatting options can be combined: ```{r} table2docx( table = table2, file = file.path(tempdir(), "Table2.docx"), caption = "Table 2. Regression Analysis", font_size = 9, font_family = "Times New Roman", bold_significant = TRUE, p_threshold = 0.05, indent_groups = TRUE, zebra_stripes = TRUE ) ``` ## **Example 14:** Page Layout Control page size and orientation for wide tables: ```{r} table2docx( table = table2, file = file.path(tempdir(), "Table2_Landscape.docx"), caption = "Table 2. Regression Results", paper = "letter", orientation = "landscape" ) ``` ## **Example 15:** Dark Header Style Use a dark header background for visual emphasis: ```{r} table2docx( table = table1, file = file.path(tempdir(), "Table1_DarkHeader.docx"), caption = "Table 1. Baseline Characteristics", dark_header = TRUE, zebra_stripes = TRUE ) ``` --- # HTML Export The `table2html()` function exports tables to HTML file output for web use via the `xtable` package. ## **Example 16:** Basic Export The simplest usage requires only a table and filename: ```{r} table2html( table = table1, file = file.path(tempdir(), "Table1.html") ) ``` ## **Example 17:** With Caption Add a caption using the `caption` parameter: ```{r} table2html( table = table1, file = file.path(tempdir(), "Table1.html"), caption = "Table 1. Baseline Characteristics" ) ``` ## **Example 18:** With Formatting Options Multiple formatting options can be combined: ```{r} table2html( table = table2, file = file.path(tempdir(), "Table2.html"), caption = "Table 2. Regression Analysis", bold_significant = TRUE, indent_groups = TRUE, zebra_stripes = TRUE, stripe_color = "#f5f5f5" ) ``` --- # PowerPoint Export The `table2pptx()` function creates PowerPoint presentations with tables using the `flextable` and `officer` packages. ## **Example 19:** Basic Export The simplest usage creates a single-slide presentation: ```{r} table2pptx( table = table1, file = file.path(tempdir(), "Table1.pptx") ) ``` ## **Example 20:** With Slide Title Add a slide title using the `slide_title` parameter: ```{r} table2pptx( table = table1, file = file.path(tempdir(), "Table1.pptx"), slide_title = "Baseline Characteristics" ) ``` ## **Example 21:** With Formatting Options Multiple formatting options can be combined: ```{r} table2pptx( table = table2, file = file.path(tempdir(), "Table2.pptx"), slide_title = "Regression Analysis", font_size = 10, font_family = "Arial", bold_significant = TRUE, indent_groups = TRUE, zebra_stripes = TRUE ) ``` ## **Example 22:** Custom Template Use an existing PowerPoint template: ```{r} table2pptx( table = table1, file = file.path(tempdir(), "Table1_Custom.pptx"), template = "my_template.pptx", layout = "Title and Content", master = "Office Theme" ) ``` --- # LaTeX Export The `table2tex()` function creates LaTeX source files for inclusion in manuscripts via the `xtable` package. ## **Example 23:** Basic Export The simplest usage requires only a table and filename: ```{r} table2tex( table = table1, file = file.path(tempdir(), "Table1.tex") ) ``` ## **Example 24:** With Caption and Label Add caption and cross-reference label: ```{r} table2tex( table = table1, file = file.path(tempdir(), "Table1.tex"), caption = "Baseline Characteristics by Group", label = "tab:demographics" ) ``` ## **Example 25:** With Booktabs Styling Use the booktabs package for professional formatting: ```{r} table2tex( table = table2, file = file.path(tempdir(), "Table2.tex"), caption = "Regression Analysis", label = "tab:regression", booktabs = TRUE, bold_significant = TRUE, indent_groups = TRUE ) ``` --- # RTF Export The `table2rtf()` function creates Rich Text Format files using the `flextable` and `officer` packages. ## **Example 26:** Basic Export The simplest usage requires only a table and filename: ```{r} table2rtf( table = table1, file = file.path(tempdir(), "Table1.rtf") ) ``` ## **Example 27:** With Formatting Options Multiple formatting options can be combined: ```{r} table2rtf( table = table2, file = file.path(tempdir(), "Table2.rtf"), caption = "Table 2. Regression Analysis", font_size = 9, font_family = "Times New Roman", bold_significant = TRUE, indent_groups = TRUE, zebra_stripes = TRUE ) ``` ## **Example 28:** Page Layout Control page size and orientation: ```{r} table2rtf( table = table2, file = file.path(tempdir(), "Table2_Landscape.rtf"), paper = "letter", orientation = "landscape" ) ``` --- # Automatic Format Detection The `autotable()` function detects the output format from the file extension, simplifying the export workflow: ```{r} autotable(table1, file.path(tempdir(), "Table1.csv")) # CSV output autotable(table1, file.path(tempdir(), "Table1.tsv")) # TSV output autotable(table1, file.path(tempdir(), "Table1.pdf")) # PDF output autotable(table1, file.path(tempdir(), "Table1.docx")) # DOCX output autotable(table1, file.path(tempdir(), "Table1.html")) # HTML output autotable(table1, file.path(tempdir(), "Table1.pptx")) # PPTX output autotable(table1, file.path(tempdir(), "Table1.tex")) # TeX output autotable(table1, file.path(tempdir(), "Table1.rtf")) # RTF output ``` Format-specific parameters pass through to the underlying function: ```{r} autotable( table = table2, file = file.path(tempdir(), "Table2.pdf"), caption = "Table 2. Regression Analysis", orientation = "landscape", font_size = 8, bold_significant = TRUE, indent_groups = TRUE, zebra_stripes = TRUE ) ``` --- # Common Formatting Parameters All export functions share common parameters for consistent results: | Parameter | Description | Default | |:----------|:------------|:--------| | `caption` | Table caption/title | `NULL` | | `font_size` | Base font size (points) | 8–10 | | `format_headers` | Auto-format column headers | `TRUE` | | `bold_significant` | Bold significant *p*-values | `TRUE` | | `p_threshold` | Significance threshold | 0.05 | | `indent_groups` | Indent factor levels | `FALSE` | | `condense_table` | Show essential rows only | `FALSE` | | `condense_quantitative` | Condense continuous/survival only (`desctable()` only) | `FALSE` | | `zebra_stripes` | Alternating row shading | `FALSE` | | `dark_header` | Dark header background | `FALSE` | ## Condensing Options The `condense_table` and `condense_quantitative` parameters reduce table height: - `condense_table = TRUE`: Condenses continuous, survival, and binary categorical variables - `condense_quantitative = TRUE`: Condenses only continuous and survival variables (`desctable()` outputs only) ```{r} # Full display table2docx(table1, file.path(tempdir(), "Table1_Full.docx")) # Condense all variable types table2docx( table = table1, file = file.path(tempdir(), "Table1_Condensed.docx"), condense_table = TRUE, zebra_stripes = TRUE ) # Condense only continuous/survival (descriptive tables only) table2docx( table = table1, file = file.path(tempdir(), "Table1_CondenseQuant.docx"), condense_quantitative = TRUE, zebra_stripes = TRUE ) ``` --- # Format-Specific Parameters ## PDF | Parameter | Description | Default | |:----------|:------------|:--------| | `margins` | Page margins `c(top, right, bottom, left)` | `c(1, 1, 1, 1)` | | `fit_to_page` | Scale table to fit page width | `TRUE` | | `cell_padding` | Vertical padding ("none", "normal", "relaxed", "loose") | `"normal"` | | `variable_padding` | Add spacing between variables | `FALSE` | | `show_logs` | Keep LaTeX log files | `FALSE` | ## Word/RTF/PowerPoint | Parameter | Description | Default | |:----------|:------------|:--------| | `font_family` | Font name | `Arial` | | `width` | Table width (inches) | `NULL` | | `align` | Column alignment vector | `NULL` | | `return_ft` | Return flextable object | `FALSE` | ## HTML | Parameter | Description | Default | |:----------|:------------|:--------| | `include_css` | Include embedded CSS styling | `FALSE` | | `stripe_color` | Zebra stripe color (hex or name) | `"#EEEEEE"` | ## LaTeX | Parameter | Description | Default | |:----------|:------------|:--------| | `booktabs` | Use booktabs package styling | `FALSE` | | `label` | LaTeX cross-reference label | `NULL` | | `cell_padding` | Arraystretch value | `"normal"` | ## PowerPoint (additional) | Parameter | Description | Default | |:----------|:------------|:--------| | `template` | Custom PPTX template file | `NULL` | | `layout` | Slide layout name | `"Title and Content"` | | `master` | Slide master name | `"Office Theme"` | | `left`, `top` | Table position (inches) | `0.5`, `1.5` | --- # Best Practices ## Format Selection | Use-Case | Recommended Format | |:---------|:-------------------| | Data archival, further processing | CSV (.csv) or TSV (.tsv) | | Journal submission | PDF (.pdf) or LaTeX (.tex) | | Manuscript drafts, collaboration | Word (.docx) | | Web/R Markdown | HTML (.html) | | Presentations | PowerPoint (.pptx) | | Maximum compatibility | RTF (.rtf) | ## Page Layout Guidelines 1. **Portrait**: Tables with ≤ 6 columns 2. **Landscape**: Tables with > 6 columns 3. **Auto-sizing**: Use `paper = "auto"` for embedding ## Consistent Multi-Format Export Export to multiple formats with consistent formatting: ```{r} common_opts <- list( caption = "Table 2. Regression Analysis", bold_significant = TRUE, indent_groups = TRUE, zebra_stripes = TRUE ) formats <- c("csv", "pdf", "docx", "html", "pptx", "rtf", "tex") for (fmt in formats) { autotable( table = table2, file = file.path(tempdir(), paste0("Table2.", fmt)), caption = common_opts$caption, bold_significant = common_opts$bold_significant, indent_groups = common_opts$indent_groups, zebra_stripes = common_opts$zebra_stripes ) } ``` --- # Troubleshooting ## PDF Compilation Fails Verify LaTeX installation and consider keeping log files for debugging: ```{r} # Check LaTeX installation Sys.which("pdflatex") # Install TinyTeX if needed # tinytex::install_tinytex() # Keep log files for debugging table2pdf(table, file.path(tempdir(), "debug.pdf"), show_logs = TRUE) ``` See [Installation and Setup](installation_setup.html) for LaTeX configuration details. ## Table Too Wide Several options address wide tables: ```{r} # Use landscape orientation table2pdf(table, file.path(tempdir(), "wide.pdf"), orientation = "landscape") # Enable fit-to-page scaling table2pdf(table, file.path(tempdir(), "wide.pdf"), fit_to_page = TRUE) # Reduce font size table2pdf(table, file.path(tempdir(), "wide.pdf"), font_size = 7) ``` ## Customizing flextable Output Get the flextable object for further customization: ```{r} ft <- table2docx(table1, file.path(tempdir(), "Table1.docx"), return_ft = TRUE) library(flextable) ft <- ft %>% bold(i = 1, part = "header") %>% color(i = 1, color = "navy", part = "header") save_as_docx(ft, path = file.path(tempdir(), "Table1_Custom.docx")) ``` ```{r, include = FALSE} options(old_opts) ``` --- # Further Reading - [Descriptive Tables](descriptive_tables.html): `desctable()` for baseline characteristics - [Regression Modeling](regression_modeling.html): `fit()`, `uniscreen()`, and `fullfit()` - [Model Comparison](model_comparison.html): `compfit()` for comparing models - [Forest Plots](forest_plots.html): Visualization of regression results - [Multivariate Regression](multivariate_regression.html): `multifit()` for multi-outcome analysis - [Advanced Workflows](advanced_workflows.html): Interactions and mixed-effects models