R knitr 在 table header kable() 中添加换行符

R knitr Add linebreak in table header kable()

我正在使用 knitr 生成一些报告。我使用kable在文档中生成一个HTML table。在 headers 我想使用换行符(或其他 html 标签)来增强 table

<!--begin.rcode results='asis'
s <- rbind(c(1,2,3,4),c(1,2,3,4),c(1,2,3,4))
kable(s, col.names=c("Try Newline\nn","Try HTML break<br>%","Past 6 months\nn","\n%"))
end.rcode-->

如您所见,我正在尝试不同的选项,但都没有成功。 在我的结果中,换行符 (\n) 只是翻译成 HTML 源中的换行符。
个标签被翻译成 HTML 个特殊字符。

有什么建议吗?

据我所知,pipe table syntax 不支持单元格中的换行符,因此如果使用 pandoc 将 markdown 转换为 HTML(这是 RStudio 使用的) , 那么你最好选择一些功能更丰富的 table 语法,例如multilinegrid。不知道如何用 kable 做到这一点,但 pander 支持那些:

> library(pander)
> colnames(s) <- c("Try Newline\nn","Try HTML break<br>%","Past 6 months\nn","\n%")
> pander(s, keep.line.breaks = TRUE)

-------------------------------------------------------
 Try Newline   Try HTML break<br>%   Past 6 months   % 
      n                                    n           
------------- --------------------- --------------- ---
      1                 2                  3         4 

      1                 2                  3         4 

      1                 2                  3         4 
-------------------------------------------------------

但这还不够,因为 pandoc 会自动删除换行符,因此您必须根据 related docs 在此处放置硬换行符 ("a backslash followed by a newline")。例如。以下代码按预期转换为 HTML:

> colnames(s) <- c("Try Newline\\nn","Try HTML break\\n%","Past 6 months\\nn","\\n%")
> pander(s, keep.line.breaks = TRUE)

-----------------------------------------------------
 Try Newline\   Try HTML break\   Past 6 months\   \ 
      n                %                n          % 
-------------- ----------------- ---------------- ---
      1                2                3          4 

      1                2                3          4 

      1                2                3          4 
-----------------------------------------------------

有一种方法可以限制列宽,您可以使用它来帮助在 kable 中实现这一点。使用 column_spec(),您可以在其中指定哪些列,以及不同单位的宽度,例如 cm、in、em。

看来 kable 将 <> 转换为 HTML 等价物,即 "&lt;""&gt;",所以我有一个快速修复方法,只要您不这样做就可以使用实际上在其他任何地方都不需要 <> 。这使我可以在 table.

的列标题中换行

基本上,一旦您的 table 完成,只需将 HTML 中的 "&lt;""&gt;" 替换为 < 和 >,然后将其另存为 HTML文件。像这样:

tbl_output <- gsub("&lt;", "<", tbl_output)
tbl_output <- gsub("&gt;", ">", tbl_output)

write(tbl_output, "TableOutput.html")

其中 tbl_output 是 kable 的输出。

或者,特别是如果您需要在 table 的其他地方使用 <>,您可以为换行符创建自己的字符串,然后在末尾为 <br> gsub。