?huxtable-FAQ
for workarounds.by_cases()
wasn't picking up variables from the
caller environment.options(huxtable.quarto_process = TRUE)
.by_cases()
to work with dplyr 1.1.0. Within by_cases()
formulas,
.
is now vector rather than matrix when dplyr version 1.1.0 is detected.
Thanks @DavisVaughan.quick_*
functions. Thanks @reuning.quick_*
functions. Thanks to @ceresek.@table-label
only work with quarto labels.column_to_header()
function converts a column to header rows.
New as_hux()
method for grouped_df
objects optionally converts groups
to header rows.stripe_rows()
and stripe_columns()
.format
and ...
options to fmt_percent()
to allow flexible
formatting via formatC()
.add_footnote()
gets an explicit number_format
argument which is NA
by default.to_screen()
.huxreg(..., error_pos = "right")
to flextable.New behaviour: setting colspan()
or rowspan()
overwrites the content of
cells that have been shadowed.
ht <- hux(c(1, 1), c(2, 2), c(3, 3))
ht <- set_all_borders(ht)
colspan(ht)[1, 1] <- 3
# old behaviour
ht[, c(2, 1, 3)]
## +--------------------------+
## | 2 |
## +--------+--------+--------+
## | 2 | 1 | 3 |
## +--------+--------+--------+
# new behaviour
ht[, c(2, 1, 3)]
## +--------------------------+
## | 1 |
## +--------+--------+--------+
## | 2 | 1 | 3 |
## +--------+--------+--------+
New option huxtable.latex_siunitx_align
allows you to use the LaTeX
siunitx
package to handle decimal point alignment. This is FALSE
by
default.
Bugfix: centre alignment was not working in print_screen()
.
Bugfix: failure in to_md()
with recent versions of stringi
package.
Bugfix: repeating a single row in a subset, like ht[c(1, 1, 2, 3), ]
,
was setting colspan = 2
on the repeated row.
Bugfix: zero-argument subset replacement like ht[] <- ...
wasn't working.
align(ht) == "."
. This may change
the appearance of some documents.tidy_override()
to extend columns of tidy
and glance
.^
was giving errors in LaTeX.table_environment
property so you can use e.g. "table*"
in TeX.print_screen(h, colnames = FALSE)
didn't print a final newline.as_flextable()
now exports markdown in cells to RTF, and to Word with the
help of the optional ftExtra
package. Thanks @atusy for adding this feature.
Improvements to markdown screen export. This now uses the optional fansi
package.
New feature: as_Workbook()
gains start_row
and start_col
arguments, to
write a huxtable into an Excel worksheet starting at a particular row or column.
New feature: huxreg()
gains a glance_args
argument to pass arguments to
glance()
.
New feature: options(huxtable.long_minus = TRUE)
will try to use long
minus signs before numbers. The default is FALSE
. It will probably become
TRUE
in a future version.
Bugfix: insert_row/column(..., after = 0)
was unsetting table properties.
Bugfix: unicode characters above 32767 were incorrectly represented in RTF. Thanks @kaigu1990.
Bugfix: columns were being collapsed in as_Workbook()
.
Bugfix: style_cells
didn't work unless huxtable was on the search path.
Bugfix: merge_repeated_rows
merged NA
rows incorrectly.
Bugfix: number format was not set correctly in huxreg()
's note
.
Bugfix: in huxreg()
, tidy_args
threw an error if the first argument to
tidy()
was a named list.
Bugfix: tidy_replace()
was broken.
Clearer error messages for tidy_override()
when extend = FALSE
. In future,
extend
will probably default to TRUE
.
Huxtable 5.0.0 brings numerous changes. For a more user-friendly introduction, see https://hughjonesd.github.io/whats-new-in-huxtable-5.0.0.html.
There are changes to LaTeX output.
\tabcolsep
is now set to 0 within huxtable tables, while left and right
padding should now take effect even when wrap
is FALSE
.width
is set.
If width
is set, it is "tabularx".wrap
only matters if width
is set. Otherwise, cell wrapping is off.\centerbox
macro from the LaTeX "adjustbox" package is used to centre
tables. This should improve centring when tables are too wide.
You may need to update the LaTeX "adjustbox" package to a recent
version. check_latex_dependencies()
can inform you about this.As previously signalled, add_colnames
has now become TRUE
by default in
huxtable()
and as_huxtable()
. Set options(huxtable.add_colnames = FALSE)
to go back to the old behaviour.
Newlines in cell contents are now respected (in LaTeX, so long as
wrap = TRUE
and width
has been set).
Huxtable borders have been reworked, fixing some longstanding bugs and adding new features.
Borders are now automatically collapsed. For example:
jams %>%
set_right_border(everywhere, 1, 1) %>%
set_left_border(everywhere, 2, 0.4)
will set the border in between the columns of jams
to 0.4
, overwriting
the previous value. This is more in line with what you would expect.
For example, the following code now does what you probably want:
```
jams %>%
set_rowspan(2, 1, 3) %>%
set_bottom_border(4, everywhere, 1)
## Type Price
## Strawberry 1.90
## 2.10
## 1.80
## ---------------------------
```
instead of the old behaviour:
```
jams %>%
set_rowspan(2, 1, 3) %>%
set_bottom_border(4, everywhere, 1)
## Type Price
## Strawberry 1.90
## 2.10
## 1.80
## -----------
```
set_left_border()
, set_all_borders()
and friends all use a default value
of 0.4. So to set a default border, write e.g.
as_hux(head(iris)) %>%
set_bottom_border(1, everywhere)
A new brdr()
class encapsulates border thickness, style
and colour. You can set all properties at once by writing, e.g.:
as_hux(jams) %>%
set_bottom_border(1, everywhere, brdr(1, "dotted", "darkgreen"))
left_border(ht)
and friends return a brdr
object. To access the border
thickness, write brdr_thickness(left_border(ht))
.
Various deprecated items have been removed:
set_*
. Instead, use map_*
.byrow
argument to set_*
. Instead, use map_*
and by_cols()
.error_style
and pad_decimal
arguments in huxreg
. Use error_format
and
align(hx) <- "."
.where()
, is_a_number()
and pad_decimal()
functions. Use map_*
functions, ! is.na(as.numeric(x))
, and align(ht) <- "."
.Default padding has been increased to 6 points.
By default, width()
is now unset.
By default, wrap()
is now TRUE
.
every()
has been renamed to stripe()
, to avoid a clash with purrr::every()
.
everywhere
, evens
and odds
are still the same.
The little-used ability to set copy_cell_props
to a character vector in
rbind.huxtable
and cbind.huxtable
has been removed. You can still set it
to FALSE
.
add_rows()
and add_columns()
now always call rbind.huxtable()
or cbind.huxtable()
and return a huxtable.
Huxtable no longer supports dplyr versions less than 0.7.0 (released mid-2017).
set_cell_properties()
has been renamed style_cells()
. It is retained
as a soft-deprecated alias.
Various themes have been tweaked:
theme_basic()
now has bold headers and no header column by default.theme_plain()
defaults to position = "centre"
.theme_striped()
uses grey stripes, a white border, and subtler headers.theme_article()
has thinner borders.You can now use markdown within table cells.
set_markdown(ht, rows, cols)
to turn this on.set_markdown_contents()
to set cell
contents that will be interpreted as markdown.Huxtable now has the concept of header row and columns.
set_header_rows(ht, row_numbers, TRUE)
.
For columns, use header_cols()
or set_header_cols()
.style_headers()
, style_header_cols()
, and
style_header_rows()
to set multiple properties on headers.header_row/col = TRUE
set the first row/col to a header,
and style all header rows/cols.set_bold()
and set_italic()
now use a default value of TRUE
. So you
can write e.g.
as_hux(head(iris)) %>%
set_bold(1, everywhere)
Console output in R now shows table position and caption position.
By default, huxtable now sets labels from the current knitr chunk label, if
there is one. This is consistent with kable()
. In bookdown, you can then do
e.g.
Some iris species are shown in \@ref(tab:mytable):
```r
as_hux(iris)
```
Set options(huxtable.autolabel = FALSE)
to turn off this behaviour.
The one-argument form of [
now works for huxtables just as it does for
data frames. For example, ht[2:3]
selects columns 2 and 3.
New functions fmt_percent()
and fmt_pretty()
for passing into
number_format()
:
jams$Sugar <-c ("Sugar content", 0.4, 0.35, 0.45)
set_number_format(jams, -1, "Sugar", fmt_percent(1))
split_across()
and split_down()
split a huxtable into a
list of sub-tables. Headers can be automatically included.
restack_across()
and restack_down()
split a huxtable, then join it back
up. This is useful for making a table fit on a page.
merge_across()
and merge_down()
merge an area of cells
horizontally across rows, or vertically down columns.
New functions set_lr_borders()/_border_colors()/_border_styles()/_padding()
set left and right borders and padding simultaneously.
New functions set_tb_borders()
etc. set top and bottom properties
simultaneously. There are map_
equivalents of all of these.
set_outer_padding()
sets padding around a range of cells,
similarly to set_outer_borders()
.
A new table-level property, caption_width()
, allows you to set the width of
the caption. The default, NA
, sets the width equal to the table width.
There are two new themes: theme_compact()
and theme_bright()
.
For huxreg()
, a new function tidy_replace()
allows you to replace the
output of tidy(x)
entirely.
huxtable now only sets options(huxtable.knit_print_df = TRUE)
if it is
attached, not if it is loaded.
huxtable supports dplyr::relocate()
, new in dplyr 1.0.0.
Improvements to as_flextable()
.
Improvements to quick_pptx()
(thanks @davidgohel).
Bugfixes for options(huxtable.use_fontspec = TRUE)
.
Bugfix: add_rownames = "string"
now works as promised.
Bugfix: non-ASCII characters are now supported in RTF.
New versions of the gtsummary
package will have an as_huxtable()
method.
Package texreg on CRAN includes a
huxtablereg()
function for creating a table of regression outputs.
by_quantiles()
, by_equal_groups()
and by_colorspace()
have gained a colwise
argument, which calculates quantiles or colors separately for each column.as_flextable()
(thanks @sjewo).merge_repeated_rows()
function: merge repeated rows into a single
cell.fill
and colspan/rowspan
arguments for insert_row()/insert_column()
:
insert_row(ht, "blah", "", "", "", "", ...)
can be written
insert_row(ht, "blah", fill = "")
.colspan/rowspan
set colspan/rowspan
of the first cell in the inserted
row/column.to_screen()
.options('huxtable.latex_use_fontspec')
to TRUE
to use portable font
names in TeX documents, with the LaTeX "fontspec" package.hux_logo()
.row_height
correctly.quick_latex()
function.texreg
package now includes a huxtablereg
function, analogous
to huxreg
, which outputs a huxtable from a list of regressions. This will
be available from the next version of texreg
.flextable
package and recent versions of Pandoc. (Powerpoint printing
requires Pandoc >= 2.4.0.)position()
allow text wrapping around tables.set_outer_border_colors()
and set_outer_border_styles()
functions, like
set_outer_borders()
.broom
package, instead using the generics
package. If you use
huxreg()
, you will still need e.g. broom
or broom.mixed
to provide tidy()
and glance()
methods for specific models.tidy.tidy_override()
and glance.tidy_override()
should work even if underlying object
has no tidy()
or glance()
method.echo = TRUE
in Rmd pdf_document format.caption()
and height()
weren't playing nicely.mutate(..., copy_cell_props = FALSE)
was adding a column named copy_cell_props
.check_latex_dependencies
and install_latex_dependencies
gave misleading errors.stars
is NULL
in huxreg
, don't print a note by default.tinytex
when available, allowing autoinstallation of latex packages.map_xxx
functions to set properties variably by cell values.by_rows
, by_values
, by_ranges
,
by_quantiles
etc.tidy_override
function to override p values etc. in huxreg
.set_contents
function to change huxtable contents within dplyr pipes.install_latex_dependencies()
or tlmgr
if it is not already on your system.huxtable()
and friends, add_rownames = "Colname"
now
sets the name for the new column.set_xxx
functions is deprecated, as is the where
function.
Use map_xxx
instead.byrow
is soft-deprecated. Use by_cols()
instead.wrap=TRUE
caused squeezed text in RTF.TeX code was getting escaped by pandoc. To avoid this, if possible, huxtable now adds fenced code blocks round latex tables (see https://pandoc.org/MANUAL.html#extension-raw_attribute). You must add
md_extensions: +raw_attribute
to your YAML header for this to work, and you will need a recent (> 2.0.0) version of Pandoc.
print_rtf
, to_rtf
and quick_rtf
functions.border_style
properties to set "solid", "double", "dotted" or "dashed" borders.
(At present, LaTeX only allows "solid" or "double".)merge_cells
function, an alternative interface to colspan
and rowspan
.quick_pptx
function to print data frames and huxtables into Powerpoint.install_latex_dependencies
and check_latex_dependencies
utility functions.add_rows
and add_columns
now accept data frames as arguments.theme_mondrian
theme :-Dprint_md
now handles bold and italic cells.quick_pdf
has new width
and height
options to change paper size.print_screen
and print_md
would hang with a wide huxtable.tribble_hux
function wrapping tibble::tribble()
for readable data input.add_rows
and add_columns
functions to insert one or more rows into the middle of a
huxtable.is_a_number
is deprecated.hux_logo()
;-)format
method which returns the result of to_html
, to_latex
etc. as appropriate.to_html
printing e.g. "left-border: NA;" in cell CSS.set_all_*
not working when huxtable is not attached.as_Workbook
failing with non-numeric width
.hux_logo
was using multiple fonts, fails with Excel output.as_flextable
borders not working in cells with colspan > 1.theme_plain
theme.add_colnames
is going to become TRUE
. At present it remains FALSE
. Set
options("huxtable.add_colnames")
to TRUE
or FALSE
to set the default and avoid warnings in
future.quick_*
functions now automatically open documents if used interactively. Use open = FALSE
to
avoid.pad_decimal
is deprecated in favour of align(ht) <- "."
.huxreg
continues with a warning if statistics
are unavailable for some models.knit_print.data.frame
methods. This
means that bare data frames will be pretty-printed via huxtable if the package is loaded.
options("huxtable.knit_print_df")
to FALSE
if you don't want this.theme_plain
theme. Set
options("huxtable.knit_print_df_theme") to a different one-argument function if you want to
use a different theme.autoformat
argument lets huxtable()
and as_huxtable()
automatically choose alignment
and number format based on column type. Set options("huxtable.autoformat")
to FALSE
to turn
off this feature by default.number_format
has changed from "%5.3g" to "%.3g", which no longer space-pads numbers.as_flextable
now does not print column names in the header. This matches the standard
huxtable behaviour whereby headers are "just another row/column". To get the old behaviour,
use colnames_to_header = TRUE
.add_colnames
.huxreg
was never using built-in confidence intervals.number_format
, huxreg
, as_hux.table
, as_flextable
.openxlsx
package.quick_xlsx
function.set_*
column specifications: e.g. set_bold(ht, 1:3, matches("ab"), TRUE)after
argument to insert_column
.quick_*
functions: when the file
argument is not explicitly specified, confirm overwrites manually, or fail
if called non-interactively.tidy_args
argument to huxreg allows per-model customization of the call to tidy
.quick_xxx
functions without an explicit file
argument throw an error if called non-interactively,
and prompt before overwriting files if called interactively.number_format
to exponents in scientific notation.quick_pdf
error when moving output across filesystems.quick_html
, quick_pdf
and quick_docx
functions to print table-like objects to a new document.to_screen
only shows colnames if there are any non-zero-length column names.number_format
now applies to any number-like substrings in cells. This means you can include e.g.
significance stars in a cell and still use number_format
to format the content.number_format
is NA, numbers are unchanged.number_format
has changed from "%5.2f" to "%5.3g", which plays nicer with integers
but may surprise you by using scientific format for large numbers.outer_borders
argument for huxreg
. This changes default behaviour slightly.border
argument for add_footnote
to choose width of footnote's top border.set_outer_borders
now accepts the same row/column arguments as other set_
functions.align
, position
and caption_pos
.huxreg
.set_outer_borders
function to set borders round a rectangle of cells.to_screen
and to_md
now respect wrap
and col_widths
properties.to_screen
and to_md
gain a min_width
argument; to_md
gains a logical header
argument; to_screen
gains
a compact
argument replacing blank = NULL
.crayon
package is installed. New huxtable.color_screen
option.ReporteRs
to officer
and flextable
. No more RJava
horror.error_format
argument to huxreg
for flexible control over uncertainty estimates.collapse
, borders
, blank
and colname_color
from to_screen
/print_screen
.as_FlexTable
is deprecated and calls as_flextable
with a warning. header_rows
and footer_rows
arguments are ignored. If you need this feature, tell me.huxreg
:
ci_level
is NULL
by default. Set it to a number to calculate confidence intervals.error_style
is deprecated with a warning in favour of error_format
.{stars}
not %stars%
to display significance levels in the note
argument.borders
becomes a number specifying border width. Set to 0 for no borders.insert_row
and insert_column
.latex_float
property allows you to change positioning in LaTeX.caption_pos
.set_default_properties
function to set default properties for new huxtables.huxreg
.huxreg
function to convert a list of models to a huxtable.subset
, and filling in values by row.$<-
, [<-
and [[<-
now work better.set_cell_properties
to set multiple properties on cells.evens
, odds
, everywhere
, every(n, from)
, final(n)
, where(cond)
:
convenience functions to select rows, columns and cells.ReporteRs
.filter
and select
.guess_knitr_output_format
.huxreg
.theme_minimal
has been renamed theme_basic
to avoid a name clash with ggplot2
.NEWS.md
file to track changes to the package.