h | u | ||||
x | |||||
t | |||||
a | b | l | |||
e |
Introduction | Design | Documentation | Github | Bugs |
Huxtable is an R package to create LaTeX and HTML tables, with a friendly, modern interface.
Features include control over text styling,
number format, background color, borders, padding
and alignment. Cells can span multiple rows and/or columns.
Tables can be manipulated with standard R subsetting or
dplyr
functions. Here are some quick examples:
ht <- hux( Employee = c("John Smith", "Jane Doe", "David Hugh-Jones"), Salary = c(50000, 50000, 40000), add_colnames = TRUE ) bold(ht)[1,] <- TRUE bottom_border(ht)[1,] <- 0.4 align(ht)[,2] <- "right" right_padding(ht) <- 10 left_padding(ht) <- 10 width(ht) <- 0.35 number_format(ht) <- 2 ht
Employee | Salary |
---|---|
John Smith | 50000.00 |
Jane Doe | 50000.00 |
David Hugh-Jones | 40000.00 |
library(magrittr) ht <- hux( Employee = c("John Smith", "Jane Doe", "David Hugh-Jones"), Salary = c(50000, 50000, 40000) ) ht |> set_bold(1, everywhere) |> set_bottom_border(1, everywhere) |> set_align(everywhere, 2, "right") |> set_lr_padding(10) |> set_width(0.35) |> set_number_format(2)
Employee | Salary |
---|---|
John Smith | 50000.00 |
Jane Doe | 50000.00 |
David Hugh-Jones | 40000.00 |
mtcars[1:5] |> as_huxtable(add_rownames = "Model") |> set_bold(1, everywhere, TRUE) |> set_all_borders(1) |> map_text_color(everywhere, "mpg", by_colorspace("navy", "red", "yellow")) |> map_background_color(everywhere, "hp", by_quantiles(0.8, c("white", "yellow"))) |> map_italic(everywhere, "Model", by_regex("Merc.*" = TRUE)) |> head(12)
Model | mpg | cyl | disp | hp | drat |
---|---|---|---|---|---|
Mazda RX4 | 21 | 6 | 160 | 110 | 3.9 |
Mazda RX4 Wag | 21 | 6 | 160 | 110 | 3.9 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 |
Valiant | 18.1 | 6 | 225 | 105 | 2.76 |
Duster 360 | 14.3 | 8 | 360 | 245 | 3.21 |
Merc 240D | 24.4 | 4 | 147 | 62 | 3.69 |
Merc 230 | 22.8 | 4 | 141 | 95 | 3.92 |
Merc 280 | 19.2 | 6 | 168 | 123 | 3.92 |
Merc 280C | 17.8 | 6 | 168 | 123 | 3.92 |
data(diamonds, package = "ggplot2") lm1 <- lm(log(price) ~ carat, diamonds) lm2 <- lm(log(price) ~ depth, diamonds) lm3 <- lm(log(price) ~ carat + depth, diamonds) huxreg(lm1, lm2, lm3, statistics = c("N" = "nobs", "R2" = "r.squared"))
(1) | (2) | (3) | |
---|---|---|---|
(Intercept) | 6.215 *** | 7.749 *** | 7.313 *** |
(0.003) | (0.188) | (0.074) | |
carat | 1.970 *** | 1.971 *** | |
(0.004) | (0.004) | ||
depth | 0.001 | -0.018 *** | |
(0.003) | (0.001) | ||
N | 53940 | 53940 | 53940 |
R2 | 0.847 | 0.000 | 0.847 |
*** p < 0.001; ** p < 0.01; * p < 0.05. |
quick_pdf(mtcars) quick_docx(mtcars) quick_html(mtcars) quick_xlsx(mtcars) # Files are produced in the current working directory.
To learn more, check out the vignette in HTML or PDF format, or the original R Markdown. Or, read the design principles behind huxtable, including a comparison with other R packages to create tables.
Installation
From R-Universe:
install.packages("huxtable", repos = c("https://hughjonesd.r-universe.dev", "https://cloud.r-project.org"))
From CRAN:
install.packages("huxtable")
Development version from github:
library(devtools) install_github("hughjonesd/huxtable")
The name
Huxtable could stand for "Happy User Xtable", or if you prefer, "Hyped Up Xtable", or for Germans maybe "Html Und teX Table".
Trivia
The logo above was randomly generated by huxtable, using hux_logo()
.
The web page background is Piet Mondrian's
Composition A.
News
October 1, 2024: Huxtable 5.5.7 released
Bugfixes for quarto 1.5.
February 8, 2024: Huxtable 5.5.5 released
This contains bugfixes for quarto 1.4. Unfortunately, using quarto references is no longer possible with TeX output and quarto 1.4. Huxtable 5.5.4 was not released to CRAN due to a reverse dependency issue.
December 9, 2023: Huxtable 5.5.3 released
This contains bugfixes for quarto and Word document output.
December 16, 2022: Huxtable 5.5.2 released
This contains one small change for compatibility with dplyr 1.1.0:
in by_cases()
, when dplyr version 1.1.0 or above is detected,
the .
variable is now shaped like a vector not a matrix.
November 12, 2022: Huxtable 5.5.1 released
This is a bugfix release.
June 15, 2022: Huxtable 5.5.0 released
This release makes sure huxtable plays nicely with quarto documents. It adds some new convenience functions:
-
stripe_rows()
andstripe_columns()
add a background color stripe to your table. -
column_to_header()
converts one column to a set of headers.
May 15, 2021: Huxtable 5.4.0 released
This release fixes some bugs. It also contains one change that
may affect behaviour: when you merge cells (e.g. with merge_cells()
or by setting colspan
or rowspan
), cell contents
are copied from the top left cell to all the other "shadowed" cells. This
means that if you later subset or reorder the huxtable, the contents of
the merged cells won't change unexpectedly. Lastly, there is a new
option "huxtable.latex_siunitx_align"
, which can be used to
align numbers on the decimal point using the TeX
"siunitx" package.
May 1, 2021: Huxtable 5.3.0 released
This release improves how cell alignment is handled in LaTeX when
align(ht) == "."
. Regression tables and other numeric data
should now look much better!
February 15, 2021: Huxtable 5.2.0 released
This release fixes a bug in a test, and adds one new property,
table_environment
, which sets the table environment to
use in LaTeX.
October 28, 2020: Huxtable 5.1.1 released
This release contains some small bugfixes for new versions of R.
September 18, 2020: RStudio table contest
RStudio is running a competition to produce nice tables from R. I will be judging some of the entries. Download huxtable 5.1.0 (just released) and produce something amazing!
September 18, 2020: Huxtable 5.1.0 released
This release contains several bugfixes, and some backwards-compatible new features:
as_flextable()
now exports markdown in cells to RTF, and to Word with the help of the optional "ftExtra" package.options(huxtable.long_minus = TRUE)
will try to use long minus signs before negative numbers. The default isFALSE
, for now.as_Workbook()
gainsstart_row
andstart_col
arguments, to write a huxtable into an Excel worksheet starting at a particular row or column.
June 16, 2020: Huxtable 5.0.0 released
This release contains many changes and improvements. It also breaks backwards compatibility.
- Better LaTeX output.
- Support for markdown in cells.
- Easier borders.
- New ways to split and reshape huxtables.
- For full details, see the NEWS file.
- For a friendly introduction, see this article.
January 9, 2020: Huxtable 4.7.1 released
This release added caption support for as_flextable()
.
A new colwise
argument for by_quantiles()
,
by_equal_groups()
and by_colorspace()
allows
calculating quantiles or colors separately for
each column.
In other news, the expss package now supports export to huxtables.
October 3, 2019: Huxtable 4.7.0 released
This release improves error messages and adds some new functionality:
merge_repeated_rows()
merges repeated rows in a huxtable to create a single cell. This is useful for dealing with e.g. grouped data frames.insert_row()
andinsert_column()
gain two new arguments,fill
andcolspan/rowspan
. These can be used to quickly create a header cell:
insert_row(ht, "Header Text", fill = "", colspan = ncol(ht))
August 6, 2019: Huxtable 4.6.1 released
This release fixes two bugs, including one where cell borders around merged cells were misplaced in LaTeX.
June 12, 2019: Huxtable 4.6.0 released
This release fixes a few bugs, and adds one new feature: the ability
to use portable font names across HTML and PDF, using the LaTeX
fontspec
package. To switch this on, set
options(huxtable.latex_use_fontspec = TRUE)
.
March 19, 2019: Huxtable 4.5.0 released
This release fixes some CRAN bugs, and adds one new feature: a
quick_latex()
function to export data to a .tex file.
March 4, 2019: Huxtable 4.4.0 released
This release contains some incremental improvements:
- Huxtables can now be printed directly in Word documents and Powerpoint presentations,
thanks to the
flextable
package and recent versions of Pandoc. (Powerpoint printing requires Pandoc >= 2.4.0.) - New "wrapleft" and "wrapright" options to
position()
allow text wrapping around tables. - When possible, huxtable uses
tinytex
when available, allowing automatic installation of required latex packages. - New
set_outer_border_colors()
andset_outer_border_styles()
functions, likeset_outer_borders()
.
November 7, 2018: Huxtable 4.3.0 released
This release contains several improvements:
- New
map_xxx
functions to map values to properties. - New grey, blue, green and orange themes, and a new "themes" vignette.
- Shorter, clearer vignettes and examples.
- More work ensuring that TeX compiles OK.
Here's an example of using map_
functions to stripe a table, then pick out extreme
values:
data <- matrix(rnorm(25), 5, 5) as_hux(data) |> set_outer_borders(0.4) |> map_background_color(by_rows("grey95", "white")) |> map_text_color(by_quantiles(c(0.1, 0.9), c("red", "black", "green3")))
1.91 | -1.04 | -0.651 | -0.66 | -0.946 |
-0.941 | -0.178 | -0.9 | 0.576 | 0.397 |
0.862 | -1.75 | 0.0889 | -0.363 | -1 |
-1.33 | -0.478 | -0.351 | 0.414 | 0.889 |
-0.367 | -1.17 | -0.185 | -1.01 | 0.00422 |
October 26, 2018: Huxtable 4.2.1 released
This patch release works around a bug with recent pandoc versions, which led to huxtable's TeX commands being escaped in some rmarkdown documents.
To apply the workaround, you will need to add:
md_extensions: +raw_attribute
If you still have problems, please report a bug.
October 3, 2018: Huxtable 4.2.0 released
This minor point release adds a few features and bugfixes.
- LaTeX rendering should again be 2-3 times faster,
as_Workbook
should be faster too. - Simplify LaTeX output by creating and using our own LaTeX commands. Please report any bugs!
- RTF support: new
print_rtf
,to_rtf
andquick_rtf
functions - New
border_style
properties to set "solid", "double", "dotted" or "dashed" borders. (At present, LaTeX only allows "solid" or "double".) - New
quick_pptx
function to print data frames and huxtables into Powerpoint. - There's a new
theme_mondrian
theme :-D
August 1, 2018: Huxtable 4.1.0 released
This minor point release focuses on bugfixes, speed and maintainability.
- HTML rendering should be up to 10 times faster, LaTeX should be up to 4 times faster.
- Many packages have been moved to "Suggests:". You can now use huxtable without knitr, rmarkdown or dplyr. All the functionality is still there - if a package is needed, huxtable informs you with a warning message.
- There are new
add_rows()
andadd_columns()
functions to easily insert multiple rows and columns into a huxtable; and a newtribble_hux()
, function based ontibble::tribble()
, for readable hand-written data. - Huxtable has a new, randomly generated logo :-)
June 2, 2018: Huxtable 4.0.0 released
This release brings some changes. The most important are:
- Huxtable automatically pretty-prints data frames within
knitr
documents. - Column alignment and number format is assigned automatically for different data types.
These are breaking changes, so you can set options to go back to the old behaviour.
One other change is being introduced gradually: add_colnames
will be set to
TRUE
by default in a future release. To future-proof your code, you can enable this
behaviour by setting options(huxtable.add_colnames = TRUE)
.
Other changes include a new theme_plain
theme; automatically opening documents created by quick_pdf
and
friends; and several bugfixes. Please
report any bugs in the usual place.
February 23, 2018: Huxtable 3.0.0 released
The major version bump marks a (small) change in the quick_xxx
function
API: if called without an explicit file
argument, these functions will
fail when called non-interactively, and will prompt before overwriting files if called
interactively. This prevents nasty surprises.
Excel output is now supported using the openxlsx package. Those working in a corporate environment can now create formatted spreadsheets to make the pointy-haired boss happy.
You can now select columns using dplyr-style select helpers like matches()
and
starts_with()
in set_*
functions.
January 3, 2018: Huxtable 2.0.0 released
The major version bump marks a change in how numbers are shown. Numeric formatting
via number_format
now applies to any number found in a cell, even if there are non-numeric characters. This
means that e.g. cells like "2.71 (1.4) **" will have both numbers formatted.
There are also new quick_pdf
, quick_html
and quick_docx
functions, for quick output of data frames or similar objects in different formats.
October 2017: Huxtable 1.0.0 released!
New features include:
- RJava-free export to Word and Powerpoint with officer
- Variable border widths in LaTeX
- On-screen color - works in R terminal or latest RStudio daily builds