Create highly customized tables with this simple and dependency-free package. Data frames can be converted to 'HTML', 'LaTeX', 'Markdown', 'Word', 'PNG', 'PDF', or 'Typst' tables. The user interface is minimalist and easy to learn. The syntax is concise. 'HTML' tables can be customized using the flexible 'Bootstrap' framework, and 'LaTeX' code with the 'tabularray' package.
tinytable is a small but powerful R package to draw beautiful tables
in a variety of formats: HTML, LaTeX, Word[^1], PDF, PNG, Markdown, and
Typst. The user interface is minimalist and easy to learn, while giving
users access to powerful frameworks to create endlessly customizable
tables.
https://vincentarelbundock.github.io/tinytable/
[!NOTE]
The documentation on this website uses the latest development version of
tinytable. This version can normally be installed from R-Universe:install.packages('tinytable', repos = c('https://vincentarelbundock.r-universe.dev', 'https://cloud.r-project.org'))or from Github:
remotes::install_github("vincentarelbundock/tinytable")Remember to restart
Rcompletely after installation, to ensure that the latest version is loaded.The documentation for the current version of
tinytableis available on the CRAN package page.
There are already many excellent table-drawing packages in the R
ecosystem. Why release a new one? As the maintainer of
modelsummary, I needed a table-drawing
package which was:
R package.[^3]To achieve these goals, the design philosophy of tinytable rests on
three pillars:
Data is separate from style. The code that this package creates
keeps the content of a table separate from the style sheet that
applies to its cells. This is in contrast to other R packages that
modify the actual text in each cell to style it. Keeping data and
style separate allows tinytable to create human-readable files
which are easy to edit, debug, and extend. It also enables
developers to keep a simpler code base, with minimal use of messy
regular expressions.
Flexibility. Users’ needs are extremely varied, and a
table-drawing package must be flexible enough to accomodate
different ideas. To achieve this, tinytable builds on
battle-tested and versatile frameworks like Bootstrap for HTML and
tabularray for LaTeX.
Lightweight. Some of the most popular table-drawing packages in the
R ecosystem are very heavy: A single library() call can
sometimes load upwards of 65 R packages. In contrast, tinytable
imports zero 3rd party R package by default.
The best feature of tinytable is its simplicity. To draw a table,
simply call the tt() function with your data frame as the first
argument:
library(tinytable)
x <- mtcars[1:5, 1:5]
tt(x)
More complex tables can be created by calling arguments and chaining functions together. In the next example, we add a caption, footnote, colors, styles, and spanning column headers:
cap <- "A simple \\texttt{tinytable} example."
not <- "Nullam odio est, ullamcorper scelerisque lectus a, eleifend luctus nisl. Etiam ullamcorper, nibh vel interdum auctor, odio nulla mollis tortor, vel fringilla ante quam quis est."
tt(x,
caption = cap,
notes = not,
width = .5) |>
style_tt(
i = 1:3,
j = 1:2,
background = "teal",
color = "white",
bold = TRUE) |>
group_tt(
j = list("Halloumi" = 1:2, "Tofu" = 4:5))
The tinytable 0.19.0 tutorial will take you much further. It is
available in HTML and PDF formats at:
https://vincentarelbundock.github.io/tinytable/
[^1]: Styling options in Word are somewhat limited. See the FAQ page and
the style_tt() documentation for details.
[^2]: Other formats like Markdown and Typst are also available, but less flexible.
[^3]: Some extra packages can be imported to access specific
functionality, such as integration with Quarto, inserting ggplot2
objects as inline plots, and saving tables to PNG images or PDF
documents.