h u x t a b l e

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:

Simple table

Pipe interface

Conditional formatting

Table of regressions

Quick document 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 ), add_colnames = TRUE ) ht %>% set_bold ( 1 , everywhere) %>% set_bottom_border ( 1 , everywhere) %>% set_align (everywhere, 2 , 'right' ) %>% set_right_padding ( 10 ) %>% set_left_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) (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 logLik -26728.969 -77321.478 -26617.649 AIC 53463.939 154648.956 53243.298 *** 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.

News

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.

merges repeated rows in a huxtable to create a single cell. This is useful for dealing with e.g. grouped data frames. insert_row() and insert_column() gain two new arguments, fill and colspan/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.)

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.

allow text wrapping around tables. When possible, huxtable uses tinytex when available, allowing automatic installation of required latex packages.

when available, allowing automatic installation of required latex packages. New set_outer_border_colors() and set_outer_border_styles() functions, like set_outer_borders() .

November 7, 2018: Huxtable 4.3.0 released

This release contains several improvements:

New map_xxx functions to map values to properties.

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.86 -1.87 -1.32 0.944 1.96 0.386 -0.921 -0.239 -0.64 -0.953 -1.47 1.2 -1.14 -2.18 -1.87 0.718 0.267 -0.784 -0.217 -0.968 0.132 -1.8 -0.828 0.58 0.792

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.

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 and quick_rtf functions

, and functions New border_style properties to set "solid", "double", "dotted" or "dashed" borders. (At present, LaTeX only allows "solid" or "double".)

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.

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() and add_columns() functions to easily insert multiple rows and columns into a huxtable; and a new tribble_hux() , function based on tibble::tribble() , for readable hand-written data.

and functions to easily insert multiple rows and columns into a huxtable; and a new , function based on , 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.

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.

Printing the huxtable logo into an Excel spreadsheet

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

Going back to the 80s with on-screen color

Installation

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