【问题标题】:R knitr Add linebreak in table header kable()R knitr 在表头 kable() 中添加换行符
【发布时间】:2015-05-26 15:05:01
【问题描述】:

我正在使用 knitr 生成一些报告。我使用 kable 在文档中生成 HTML 表格。在标题中,我想使用换行符(或其他 html 标记)来增强表格

<!--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 特殊字符。

有什么建议吗?

【问题讨论】:

  • 什么是s?请发布一个可重现的示例,以便“我们可以看到”问题。
  • 更改了问题,以便您可以看到问题

标签: html r knitr


【解决方案1】:

据我所知,pipe table syntax 不支持单元格中的换行符,所以如果使用pandoc 将 markdown 转换为 HTML(这是 RStudio 使用的),那么您最好选择更多功能-丰富的表语法,例如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 在此处放置硬换行符(“反斜杠后跟换行符”)。例如。以下代码按预期转换为 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 
-----------------------------------------------------

【讨论】:

  • 在 knitr v1.13 中,如果您将输出指定为 html,则硬线中断适用于 kable:knitr::kable(s, format = "html")
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    看来 kable 将 转换为 HTML 等价物,即 "&amp;lt;""&amp;gt;",所以我有一个快速修复,只要您在其他任何地方实际上不需要 ,它就可以工作。这使我可以在表格的列标题中换行。

    基本上,一旦您的表格完成,只需将 HTML 中的 "&amp;lt;""&amp;gt;" 替换为 ,然后将其保存为 HTML 文件。像这样:

    tbl_output <- gsub("&lt;", "<", tbl_output)
    tbl_output <- gsub("&gt;", ">", tbl_output)
    
    write(tbl_output, "TableOutput.html")
    

    其中 tbl_output 是 kable 的输出。

    或者,特别是如果您需要在表格的其他地方使用 ,您可以为换行创建自己的字符串,然后在最后将其 gsub 为 &lt;br&gt;

    【讨论】:

    • 这很好。为什么不使用例如
      因为它很熟悉然后gsub("&amp;lt;br&amp;gt;", "&lt;br&gt;", tbl_output)
    猜你喜欢
    • 2021-07-04
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 2018-10-20
    • 2021-08-09
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多