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 语法,例如multiline
或 grid
。不知道如何用 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 等价物,即 "<"
和 ">"
,所以我有一个快速修复方法,只要您不这样做就可以使用实际上在其他任何地方都不需要 <> 。这使我可以在 table.
的列标题中换行
基本上,一旦您的 table 完成,只需将 HTML 中的 "<"
和 ">"
替换为 < 和 >,然后将其另存为 HTML文件。像这样:
tbl_output <- gsub("<", "<", tbl_output)
tbl_output <- gsub(">", ">", tbl_output)
write(tbl_output, "TableOutput.html")
其中 tbl_output 是 kable 的输出。
或者,特别是如果您需要在 table 的其他地方使用 <>,您可以为换行符创建自己的字符串,然后在末尾为 <br>
gsub。
我正在使用 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 语法,例如multiline
或 grid
。不知道如何用 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 等价物,即 "<"
和 ">"
,所以我有一个快速修复方法,只要您不这样做就可以使用实际上在其他任何地方都不需要 <> 。这使我可以在 table.
基本上,一旦您的 table 完成,只需将 HTML 中的 "<"
和 ">"
替换为 < 和 >,然后将其另存为 HTML文件。像这样:
tbl_output <- gsub("<", "<", tbl_output)
tbl_output <- gsub(">", ">", tbl_output)
write(tbl_output, "TableOutput.html")
其中 tbl_output 是 kable 的输出。
或者,特别是如果您需要在 table 的其他地方使用 <>,您可以为换行符创建自己的字符串,然后在末尾为 <br>
gsub。