| table2rtf | R Documentation |
Converts a data frame, data.table, or matrix to a Rich Text Format (.rtf)
document using the flextable and officer packages. Creates
widely compatible tables with extensive formatting options. RTF files can be
opened and edited in Microsoft Word, LibreOffice, WordPad, and many other word
processors. Particularly useful for regulatory submissions, cross-platform
compatibility, and when maximum editability is required.
table2rtf(
table,
file,
caption = NULL,
font_size = 8,
font_family = "Arial",
format_headers = TRUE,
bold_significant = TRUE,
bold_variables = FALSE,
p_threshold = 0.05,
indent_groups = FALSE,
condense_table = FALSE,
condense_quantitative = FALSE,
zebra_stripes = FALSE,
dark_header = FALSE,
paper = "letter",
orientation = "portrait",
width = NULL,
align = NULL,
return_ft = FALSE,
...
)
table |
Data frame, data.table, or matrix to export. Can be output from
|
file |
Character string specifying the output RTF filename. Must have
|
caption |
Character string. Optional caption displayed above the table
in the RTF document. Default is |
font_size |
Numeric. Base font size in points for table content. Default is 8. Typical range: 8-12 points. Headers use slightly larger size. |
font_family |
Character string. Font family name for the table. Must be
a font installed on the system. Default is |
format_headers |
Logical. If |
bold_significant |
Logical. If |
bold_variables |
Logical. If |
p_threshold |
Numeric. Threshold for bold p-value formatting. Only
used when |
indent_groups |
Logical. If |
condense_table |
Logical. If |
condense_quantitative |
Logical. If |
zebra_stripes |
Logical. If |
dark_header |
Logical. If |
paper |
Character string specifying paper size:
|
orientation |
Character string specifying page orientation:
|
width |
Numeric. Table width in inches. If |
align |
Character vector specifying column alignment for each column.
Options: |
return_ft |
Logical. If |
... |
Additional arguments (currently unused, reserved for future extensions). |
Package Requirements:
This function requires:
flextable - For creating formatted tables
officer - For RTF document generation
Install if needed:
install.packages(c("flextable", "officer"))
RTF Format Advantages:
RTF (Rich Text Format) is a universal document format with several advantages:
Maximum compatibility - Opens in virtually all word processors
Cross-platform - Works on Windows, Mac, Linux without conversion
Fully editable - Native text format, not embedded objects
Lightweight - Smaller file sizes than DOCX
Regulatory compliance - Widely accepted for submissions (FDA, EMA)
Long-term accessibility - Simple text-based format
Version control friendly - Text-based, works with diff tools
Applications that can open RTF files:
Microsoft Word (Windows, Mac)
LibreOffice Writer
Apache OpenOffice Writer
WordPad (Windows built-in)
TextEdit (Mac built-in)
Google Docs (with import)
Pages (Mac)
Many other word processors
Output Features:
The generated RTF document contains:
Fully editable table (native RTF table, not image)
Professional typography and spacing
Proper page setup (size, orientation, margins)
Caption (if provided) as separate paragraph above table
All formatting preserved but editable
Compatible with RTF 1.5 specification
Further Customization:
For programmatic customization beyond the built-in options, access the
flextable object:
Method 1: Via attribute (default)
result <- table2rtf(table, "output.rtf") ft <- attr(result, "flextable") # Customize flextable ft <- flextable::bold(ft, i = 1, j = 1, part = "body") ft <- flextable::color(ft, i = 2, j = 3, color = "red") # Re-save if needed flextable::save_as_rtf(ft, path = "customized.rtf")
Method 2: Direct return
ft <- table2rtf(table, "output.rtf", return_ft = TRUE) # Customize immediately ft <- flextable::bg(ft, bg = "yellow", part = "header") ft <- flextable::autofit(ft) # Save to new file flextable::save_as_rtf(ft, path = "custom.rtf")
Page Layout:
The function automatically sets up the RTF document with:
Specified paper size and orientation
Standard margins (1 inch by default)
Table positioned at document start
Left-aligned table placement
For landscape orientation:
Automatically swaps page dimensions
Applies landscape property
Useful for wide tables with many columns
Table Width Management:
Width behavior:
width = NULL - Auto-fits to content and page width
width = 6 - Exactly 6 inches wide
Width distributed evenly across columns by default
Can adjust individual column widths in word processor after creation
For very wide tables:
Use orientation = "landscape"
Use paper = "legal" for extra width
Reduce font_size
Use condense_table = TRUE
Consider breaking across multiple tables
Typography:
The function applies professional typography:
Column headers: Bold, slightly larger font
Body text: Regular weight, specified font size
Numbers: Right-aligned for easy comparison
Text: Left-aligned for readability
Consistent spacing: Adequate padding in cells
Statistical notation: Italicized appropriately
Behavior depends on return_ft:
return_ft = FALSEInvisibly returns a list with components:
file - Path to created file
caption - Caption text (if provided)
The flextable object is accessible via attr(result, "flextable")
return_ft = TRUEDirectly returns the flextable object for immediate further customization
In both cases, creates a .rtf file at the specified location.
autotable for automatic format detection,
table2docx for Word documents,
table2pptx for PowerPoint slides,
table2pdf for PDF output,
table2html for HTML tables,
table2tex for LaTeX output,
flextable for the underlying table object,
save_as_rtf for direct RTF export
Other export functions:
autotable(),
table2docx(),
table2html(),
table2pdf(),
table2pptx(),
table2tex()
data(clintrial)
data(clintrial_labels)
# Create example table
results <- fit(
data = clintrial,
outcome = "os_status",
predictors = c("age", "sex", "treatment", "stage"),
labels = clintrial_labels
)
# Example 1: Basic RTF export
if (requireNamespace("flextable", quietly = TRUE)) {
table2rtf(results, file.path(tempdir(), "results.rtf"))
}
old_width <- options(width = 180)
# Example 2: With caption
table2rtf(results, file.path(tempdir(), "captioned.rtf"),
caption = "Table 1: Multivariable Logistic Regression Results")
# Example 3: Landscape orientation for wide tables
table2rtf(results, file.path(tempdir(), "wide.rtf"),
orientation = "landscape")
# Example 4: Custom font and size
table2rtf(results, file.path(tempdir(), "custom_font.rtf"),
font_family = "Times New Roman",
font_size = 11)
# Example 5: Hierarchical display
table2rtf(results, file.path(tempdir(), "indented.rtf"),
indent_groups = TRUE)
# Example 6: Condensed table
table2rtf(results, file.path(tempdir(), "condensed.rtf"),
condense_table = TRUE)
# Example 7: With zebra stripes
table2rtf(results, file.path(tempdir(), "striped.rtf"),
zebra_stripes = TRUE)
# Example 8: Dark header style
table2rtf(results, file.path(tempdir(), "dark.rtf"),
dark_header = TRUE)
# Example 9: A4 paper for international submissions
table2rtf(results, file.path(tempdir(), "a4.rtf"),
paper = "a4")
# Example 10: Get flextable for customization
result <- table2rtf(results, file.path(tempdir(), "base.rtf"))
ft <- attr(result, "flextable")
# Customize the flextable
ft <- flextable::bold(ft, i = 1, part = "body")
ft <- flextable::color(ft, j = "p-value", color = "blue")
# Re-save
flextable::save_as_rtf(ft, path = file.path(tempdir(), "customized.rtf"))
# Example 11: Direct flextable return
ft <- table2rtf(results, file.path(tempdir(), "direct.rtf"), return_ft = TRUE)
ft <- flextable::bg(ft, bg = "yellow", part = "header")
# Example 12: Regulatory submission table
table2rtf(results, file.path(tempdir(), "submission.rtf"),
caption = "Table 2: Adjusted Odds Ratios for Mortality",
font_family = "Times New Roman",
font_size = 10,
indent_groups = TRUE,
zebra_stripes = FALSE,
bold_significant = TRUE)
# Example 13: Custom column alignment
table2rtf(results, file.path(tempdir(), "aligned.rtf"),
align = c("left", "left", "center", "right", "right"))
# Example 14: Disable significance bolding
table2rtf(results, file.path(tempdir(), "no_bold.rtf"),
bold_significant = FALSE)
# Example 15: Stricter significance threshold
table2rtf(results, file.path(tempdir(), "strict.rtf"),
bold_significant = TRUE,
p_threshold = 0.01)
# Example 16: Descriptive statistics for baseline characteristics
desc <- desctable(clintrial, by = "treatment",
variables = c("age", "sex", "bmi", "stage"), labels = clintrial_labels)
table2rtf(desc, file.path(tempdir(), "baseline.rtf"),
caption = "Table 1: Baseline Patient Characteristics",
zebra_stripes = TRUE)
# Example 17: Clinical trial efficacy table
table2rtf(results, file.path(tempdir(), "efficacy.rtf"),
caption = "Table 3: Primary Efficacy Analysis - Intent to Treat Population",
font_family = "Courier New", # Monospace for alignment
paper = "letter",
orientation = "landscape",
condense_table = TRUE)
options(old_width)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.