This function formats the columns of a data frame based on the column type (logical, date, numeric).
It allows various formatting options like significant digits, decimal points, and scientific notation.
It also includes custom formatting for date and boolean values.
If this function is applied several times to the same cell, the last transformation is retained and the previous calls are ignored, except for the escape
argument which can be applied to previously transformed data.
format_tt(
x,
i = NULL,
j = NULL,
digits = get_option("tinytable_format_digits", default = NULL),
num_fmt = get_option("tinytable_format_num_fmt", default = "significant"),
num_zero = get_option("tinytable_format_num_zero", default = FALSE),
num_suffix = get_option("tinytable_format_num_suffix", default = FALSE),
num_mark_big = get_option("tinytable_format_num_mark_big", default = ""),
num_mark_dec = get_option("tinytable_format_num_mark_dec", default =
getOption("OutDec", default = ".")),
date = get_option("tinytable_format_date", default = NULL),
bool = get_option("tinytable_format_bool", default = NULL),
math = get_option("tinytable_format_math", default = FALSE),
other = get_option("tinytable_format_other", default = NULL),
replace = get_option("tinytable_format_replace", default = FALSE),
escape = get_option("tinytable_format_escape", default = FALSE),
markdown = get_option("tinytable_format_markdown", default = FALSE),
quarto = get_option("tinytable_format_quarto", default = FALSE),
fn = get_option("tinytable_format_fn", default = NULL),
sprintf = get_option("tinytable_format_sprintf", default = NULL)
)
A data frame with formatted columns.
A data frame or a vector to be formatted.
Numeric vector or string.
Numeric vector: Row indices where the styling should be applied. Can be a single value or a vector.
String: Table components to format "caption", "colnames", "groupi" (row group labels), "~groupi" (non-group rows), "groupj" (column group labels), "notes".
If both the i
and j
are omitted (default: NULL), formatting is applied to all table elements, including caption, notes, and group labels.
Column indices where the styling should be applied. Can be:
Integer vectors indicating column positions.
Character vector indicating column names.
A single string specifying a Perl-style regular expression used to match column names.
Number of significant digits or decimal places.
The format for numeric values; one of 'significant', 'significant_cell', 'decimal', or 'scientific'.
Logical; if TRUE, trailing zeros are kept in "decimal" format (but not in "significant" format).
Logical; if TRUE display short numbers with digits
significant digits and K (thousands), M (millions), B (billions), or T (trillions) suffixes.
Character to use as a thousands separator.
Decimal mark character. Default is the global option 'OutDec'.
A string passed to the format()
function, such as "%Y-%m-%d". See the "Details" section in ?strptime
A function to format logical columns. Defaults to title case.
Logical. If TRUE, wrap cell values in math mode $..$
. This is useful for LaTeX output or with HTML MathJax options(tinytable_html_mathjax=TRUE)
.
A function to format columns of other types. Defaults to as.character()
.
Logical, String or Named list of vectors
TRUE: Replace NA
and NaN
by an empty string.
FALSE: Print NA
and NaN
as strings.
String: Replace NA
and NaN
entries by the user-supplied string.
Named list: Replace matching elements of the vectors in the list by theirs names. Example:
list("-" = c(NA, NaN), "Tiny" = -Inf, "Massive" = Inf)
Logical or "latex" or "html". If TRUE, escape special characters to display them as text in the format of the output of a tt()
table.
If i
and j
are both NULL
, escape all cells, column names, caption, notes, and spanning labels created by group_tt()
.
Logical; if TRUE, render markdown syntax in cells. Ex: _italicized text_
is properly italicized in HTML and LaTeX.
Logical. Enable Quarto data processing and wrap cell content in a data-qmd
span (HTML) or \QuartoMarkdownBase64{}
macro (LaTeX). See warnings in the Global Options section below.
Function for custom formatting. Accepts a vector and returns a character vector of the same length.
String passed to the ?sprintf
function to format numbers or interpolate strings with a user-defined pattern (similar to the glue
package, but using Base R).
Options can be set with options()
and change the default behavior of tinytable. For example:
options(tinytable_tt_digits = 4)
tt(head(iris))
You can set options in a script or via .Rprofile
. Note: be cautious with .Rprofile
settings as they may affect reproducibility.
tinytable_tt_digits
tinytable_tt_caption
tinytable_tt_notes
tinytable_tt_width
tinytable_tt_theme
tinytable_tt_rownames
tinytable_format_digits
tinytable_format_num_fmt
tinytable_format_num_zero
tinytable_format_num_suffix
tinytable_format_num_mark_big
tinytable_format_num_mark_dec
tinytable_format_date
tinytable_format_bool
tinytable_format_other
tinytable_format_replace
tinytable_format_escape
tinytable_format_markdown
tinytable_format_quarto
tinytable_format_fn
tinytable_format_sprintf
tinytable_save_overwrite
Placement:
tinytable_theme_placement_float
tinytable_theme_placement_horizontal
Resize:
tinytable_theme_resize_width
tinytable_theme_resize_direction
Multipage:
tinytable_theme_multipage_rowhead
tinytable_theme_multipage_rowfoot
Tabular:
tinytable_theme_tabular_style
tinytable_print_output
tinytable_html_mathjax
: Insert MathJax scripts (warning: may conflict if MathJax is loaded elsewhere)
tinytable_html_portable
: Insert base64 encoded images directly in HTML for plot_tt()
tinytable_pdf_clean
: Delete temporary and log files
tinytable_pdf_engine
: Choose between "xelatex", "pdflatex", "lualatex"
tinytable_color_name_normalization
: Enable/disable automatic color name processing (default: TRUE). When enabled, R color names recognized by col2rgb()
are converted to hex format for consistent rendering across HTML, LaTeX, and Typst formats. If R color conversion fails, LaTeX color names are used as fallback. Colors explicitly supplied as hex values with "#" prefix are passed through unchanged. Set to FALSE to disable processing and pass color names unchanged.
The format_tt(quarto=TRUE)
argument enables Quarto data processing with some limitations:
The \QuartoMarkdownBase64{}
LaTeX macro may not process references and markdown as expected
Quarto processing may conflict with tinytable
styling/formatting
Options:
tinytable_quarto_disable_processing
: Disable Quarto cell processing
tinytable_print_rstudio_notebook
: Display tables "inline" or in "viewer" for RStudio notebooks
tinytable_quarto_figure
: Control Typst figure environment in Quarto
Example of Quarto-specific code in cells:
x <- data.frame(Math = "x^2^", Citation = "@Lovelace1842")
fn <- function(z) sprintf("<span data-qmd='%s'></span>", z)
tt(x) |> format_tt(i = 1, fn = fn)
For more details on Quarto table processing: https://quarto.org/docs/authoring/tables.html#disabling-quarto-table-processing
dat <- data.frame(
a = rnorm(3, mean = 10000),
b = rnorm(3, 10000)
)
tab <- tt(dat)
format_tt(tab,
digits = 2,
num_mark_dec = ",",
num_mark_big = " "
)
k <- tt(data.frame(x = c(0.000123456789, 12.4356789)))
format_tt(k, digits = 2, num_fmt = "significant_cell")
dat <- data.frame(
a = c("Burger", "Halloumi", "Tofu", "Beans"),
b = c(1.43202, 201.399, 0.146188, 0.0031),
c = c(98938272783457, 7288839482, 29111727, 93945)
)
tt(dat) |>
format_tt(j = "a", sprintf = "Food: %s") |>
format_tt(j = 2, digits = 1, num_fmt = "decimal", num_zero = TRUE) |>
format_tt(j = "c", digits = 2, num_suffix = TRUE)
y <- tt(data.frame(x = c(123456789.678, 12435.6789)))
format_tt(y, digits = 3, num_mark_big = " ")
x <- tt(data.frame(Text = c("_italicized text_", "__bold text__")))
format_tt(x, markdown = TRUE)
tab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))
tt(tab) |> format_tt(replace = "-")
dat <- data.frame(
"LaTeX" = c("Dollars $", "Percent %", "Underscore _"),
"HTML" = c("", "4", "blah")
)
tt(dat) |> format_tt(escape = TRUE)
Run the code above in your browser using DataLab