13.2 gt 和 kableExtra

如表 13.1 所示,我们可以自定义表格样式,比如配色,例子修改自 kableExtra 帮助文档 https://haozhu233.github.io/kableExtra/bookdown/cross-format-tables-in-bookdown.html,同时支持 HTML 和 LaTeX 输出, 但是 LaTeX 输出需要在文档类选项中增加 table 选项,即 classoption: "table",这样就可以加载 colortbl 宏包,进而提供 \rowcolor 等 LaTeX 命令,在表格中给每个格子定制颜色。我们推荐在 classoption 中添加 table 选项,而不是再次加载 xcolor 包,比如像这样 \usepackage[table]{xcolor},这会在 R Markdown 中引起冲突 27

library(kableExtra)

iris[1:10, ] %>%
  transform(
    Sepal.Length =
      cell_spec(Sepal.Length,
        bold = T,
        color = spec_color(Sepal.Length, end = 0.9),
        font_size = spec_font_size(Sepal.Length)
      )
  ) %>%
  transform(Species = cell_spec(
    Species,
    color = "white", bold = T,
    background = spec_color(1:10,
      end = 0.9,
      option = "A", direction = -1
    )
  )) %>%
  kable(
    escape = F, align = "c", booktabs = T,
    caption = "自定义表格样式"
  ) %>%
  kable_styling(c("striped", "condensed"),
    latex_options = "striped",
    full_width = F
  )
表 13.1: 自定义表格样式
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
4.6 3.4 1.4 0.3 setosa
5 3.4 1.5 0.2 setosa
4.4 2.9 1.4 0.2 setosa
4.9 3.1 1.5 0.1 setosa

一个非常基本的 gt 制作的表格

library(gt)
iris %>% 
  head() %>% 
  gt()

然后添加表格的标题和副标题,套上 md() 函数后,标题和副标题支持 Markdown 语法,告别 HTML 的制表方式吧!其它表格元素,如脚注支持和表格的列指标关联

library(data.table)

iris %>%
  as.data.table %>% 
  .[, head(.SD, 2), by = .(Species)] %>% 
  gt() %>%
  tab_header(
    title = md("**鸢尾花**数据集"),
    subtitle = "R 内置数据集"
  ) %>%
  data_color(
    columns = vars(Sepal.Length),
    colors = scales::col_numeric(palette = terrain.colors(5, rev = T), domain = NULL)
  ) %>%
  data_color(
    columns = vars(Species),
    colors = scales::col_factor(palette = hcl.colors(3), domain = NULL)
  ) %>%
  tab_footnote(
    footnote = md("据说数据集最早收集自 Fisher's or Anderson's"),
    locations = cells_column_labels(columns = vars(Sepal.Length))
  ) %>%
  tab_footnote(
    footnote = "鸢尾花的类别",
    locations = cells_column_labels(
      columns = vars(Species)
    )
  )

更多细节的设置见 Thomas Mock 的博文gt - a (G)rammar of (T)ables

当前 gt 包对 LaTeX 的支持比较弱,上述表格在 HTML 网页环境中可以看到的效果并不能一一对应到 LaTeX 输出中。且 gt 包生成 LaTeX 表格会自动加载宏包 amsmath、booktabs、caption 和 longtable, gt_latex_dependencies() 且不能控制