【问题标题】:kableExtra: Cannot save HTML table with math expressions & can't get in-line hist to display with Latex tablekableExtra:无法使用数学表达式保存 HTML 表格,无法使用 Latex 表格显示内联历史记录
【发布时间】:2021-12-02 00:59:25
【问题描述】:

我想将 R 中的表格另存为图像,其中包含列名中的 数学表达式 和来自 spec_hist() 函数的 内嵌直方图 kable额外。理想情况下,我希望表格格式为 Latex 表格,但 HTML 也可以。

我遇到的问题是,当我尝试保存一个 kable HTML 表时,数学表达式没有正确解释,但内嵌直方图显示得很好。

同时,如果我尝试保存 kable Latex 表,数学表达式会正确解释,但不会出现直方图。

这可能是 kableExtra 中的一个错误(两个错误?)吗?还是我错过了什么?

请注意,kable HTML 表格在 R Studio/R Markdown 中看起来非常好(数学表达式和内联图)。但我想保存一个重用的图像。 然而,kable Latex 表从不显示内嵌直方图,无论是在 R 中显示还是保存到文件中。

这是一个可重现的例子:

library(knitr)
library(kableExtra)

df <- mtcars[1:6,] %>% 
          mutate(`$\\theta_{boot}$` = "") %>% # add an empty column where the in-line histograms will go
          rename(`$mpg$` = mpg, # rename some columns to math expressions
                 `$\\bar{cyl}$` = cyl, 
                 `$\\bar{disp}$` = disp,
                 `$hp$` = hp, 
                 `$drat$` = drat)

# create dummy data for the in-line histograms
hist_dat <- list(runif(20), runif(20), runif(20), runif(20), runif(20), runif(20))


# Make HTML Table
kbl(df, escape = FALSE, booktabs = T, format = "html") %>%
  add_header_above(c("Some Header" = 6, "Some Other Header" = 7)) %>% # add header
  kable_styling(latex_options = c("repeat_header"), font_size = 12) %>%
  column_spec(12, image = spec_hist(hist_dat)) %>% # add in-line hist
  pack_rows("Group 1", 1, 3) %>%
  pack_rows("Group 2", 4, 6) %>%
  kable_paper() %>%
  as_image(file = 'temp.png')
  #save_kable(file = 'temp.png')

上面保存了这张图片:

直方图在那里,但列名被打印为文字而不是解释的数学表达式。

现在是乳胶版本:

# Make Latex Table
kbl(df, escape = FALSE, booktabs = T, format = "latex") %>%
  add_header_above(c("Some Header" = 6, "Some Other Header" = 7)) %>% 
  kable_styling(latex_options = c("repeat_header"), font_size = 12) %>%
  column_spec(12, image = spec_hist(hist_dat)) %>%  
  pack_rows("Group 1", 1, 3) %>%
  pack_rows("Group 2", 4, 6) %>%
  kable_paper(full_width = TRUE) %>%
  as_image(file = 'temp_latex.png')
  #save_kable(file = 'temp.png')

使用 format = "latex" 和 full_width = TRUE 生成以下文件:

现在列名被正确解释,但直方图未绘制。

我也发现使用as_image()save_kable() 保存图像没有区别。

有什么想法吗?

谢谢!

编辑: 硬件说明:我在安装了 LaTeX 的 Mac 上。图形工作正常,尽管在我的 Windows 机器上所有涉及乳胶的调用都失败了(相同的代码,安装了 MikTeX、Ghostscript 和 Magick)。

> R.version
               _                           
platform       x86_64-apple-darwin17.0     
arch           x86_64                      
os             darwin17.0                  
system         x86_64, darwin17.0          
status                                     
major          4                           
minor          1.0                         
year           2021                        
month          05                          
day            18                          
svn rev        80317                       
language       R                           
version.string R version 4.1.0 (2021-05-18)
nickname       Camp Pontanezen 

【问题讨论】:

    标签: html r math latex kableextra


    【解决方案1】:

    如果您编织 rmarkdown 文档,则会生成 pdf 文档(文档中包含图像),并且图像会单独保存为文件。

    似乎需要调整列规范以考虑行名。

    添加列宽有助于管理页面上的表格。

    ```{r, results='asis'}
    
    library(knitr)
    library(kableExtra)
    library(dplyr)
    
    
    kable(df,
          format = "latex",
          escape = FALSE,
          booktabs = TRUE) %>%
      add_header_above(c("Some Header" = 6, "Some Other Header" = 7)) %>%
      kable_styling(font_size = 8, full_width = TRUE) %>%
      column_spec(1, width = "30mm") %>% 
      column_spec(2:12, width = "6mm") %>%
      column_spec(13, image = spec_hist(hist_dat, col = "red")) %>%  
      pack_rows("Group 1", 1, 3) %>%
      pack_rows("Group 2", 4, 6) %>%
      as_image(file = 'temp/as-image.png') 
      # as_image(file = 'temp/as-image.pdf') # works as pdf as well
    ```
    

    【讨论】:

    • 谢谢!修复列规格并在编织后获得输出!但是,我现在遇到的一个问题是,我在每个直方图的左侧看到“NA”。 (mpg 数据不会发生这种情况,但我自己的数据不会发生这种情况,即使我已确保该列是空的 - 像上面的 theta_boot 一样定义 - 并且数据是 data.frame 而不是 tibble。)
    • 您是否尝试过设置 knitr 选项 knitr.kable.na = '' ''?如果这不起作用,我建议创建一个最小数据框来重现此行为并询问另一个问题如何删除“NA”,参考这个问题。
    猜你喜欢
    • 1970-01-01
    • 2015-02-06
    • 2012-09-29
    • 2020-12-14
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多