На данный момент нет простого способа сделать это. Но я включил пример кода, который, по моему мнению, решит вашу проблему.
С {flextable} важно порядок вызова функций. Запуск as_flextable()
и добавление дополнительных вызовов, кажется, не дает вам того, что вы хотите.
Альтернатива - сохранить вызовы, при необходимости вставить новые вызовы гибких функций, а затем оценить вызовы. Это то, что делается в приведенном ниже примере.
---
title: "Untitled"
output: word_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, message = FALSE)
```
```{r}
library(tidyverse)
library(gtsummary)
library(flextable)
set_gtsummary_theme(theme_gtsummary_jama())
tbl <-
mtcars[1:20, c(1, 2, 9, 4)] %>%
tbl_summary(
missing = "ifany",
by = am,
type = list(cyl ~ "categorical")
) %>%
bold_labels() %>%
add_p() %>%
add_overall()
```
### Default Flextable
```{r}
gtsummary::as_flextable(tbl)
```
### Compact Flextable
```{r}
# this function inserts additional flextable calls, then evaluates the calls
update_flextable_calls <- function(x, call_list, after) {
# saving calls that create the flextable
x_calls <- gtsummary::as_flextable(x, return_calls = TRUE)
# adding new calls at `after=`
after_n <- names(x_calls) %in% after %>% which()
x_calls <- c(
x_calls[1:after_n],
call_list,
x_calls[(after_n + 1):length(x_calls)]
)
# evaluating calls
x_calls %>%
unlist() %>%
purrr::compact() %>%
# concatenating expressions with %>% between each of them
purrr::reduce(function(x, y) rlang::expr(!!x %>% !!y)) %>%
# evaluating expressions
eval()
}
# list of calls that make a table compact
compact_calls <- list(
rlang::expr(font(fontname = "Bodoni 72", part = "all")),
rlang::expr(fontsize(size = 8, part = "all")),
rlang::expr(padding(padding.top = 0, part = "all")),
rlang::expr(padding(padding.bottom = 0, part = "all"))
)
# adding the compact calls, and evaluating them
update_flextable_calls(
x = tbl, # gtsummary table
call_list = compact_calls, # calls that make flextable compact
after = "footnote" # add calls after the "footnote" functions
)
```
Это, очевидно, не является хорошим постоянным решением. У нас есть тема под названием theme_gtsummary_compact()
, которая делает таблицы {gt} компактными с меньшим шрифтом и уменьшенным заполнением. Мы можем обновить тему, чтобы сделать flextables более компактными! Я был бы рад, если бы вы создали проблему на GitHub, чтобы обновить theme_gtsummary_compact()
для гибких, и мы могли бы сотрудничать над решением, которое будет работать для вас. https://github.com/ddsjoberg/gtsummary/issues/new/choose