如何在R函数内输出可分页的HTML表格?
在R Notebook函数内输出分页表格的解决方法
我编写了一个可针对给定数据输出各类表格和图表的函数,希望将其用于可编织为HTML的R Notebook中。我偏好tibble和数据框在编织后的HTML文档中默认的分页展示样式,但该样式仅在数据框/tibble处于顶层打印时生效,在函数调用内无法生效(除非返回结果并到达顶层)。
我尝试了以下方法:
- 使用
print(mtcars)会生成R控制台风格的纯ASCII格式表格; - 使用
rmarkdown::paged_table(mtcars)可生成美观的分页表格,但无法在函数内输出(除非结果到达顶层); - 使用
print(rmarkdown::paged_table(mtcars))仍仅生成纯ASCII格式表格; - 尝试
knitr::knit_print()和knitr::asis_output()的组合,例如knitr::knit_print(rmarkdown::paged_table(mtcars))在函数内调用时无任何输出。
解决方法
要在函数内输出分页表格,需要结合knitr::knit_print()和显式打印操作,让knitr正确捕获并渲染分页表格的HTML输出。修改后的完整代码如下:
--- title: "R Notebook" output: html_document: df_print: paged --- ```{r} do_things <- function() { # 生成分页表格对象 paged_tbl <- rmarkdown::paged_table(mtcars) # 调用knit_print生成HTML输出并打印,让knitr捕获渲染 print(knitr::knit_print(paged_tbl)) return(1) } do_things()
原理说明
rmarkdown::paged_table()创建的是一个带有自定义knit_print方法的对象,该方法负责生成分页表格的HTML代码;- 在函数内直接调用
rmarkdown::paged_table()时,knitr不会主动捕获其输出,必须通过knitr::knit_print()显式触发HTML生成,并通过print()让knitr捕获这个输出内容,最终在编织时渲染成分页表格; - 函数依然可以正常返回其他值(示例中的
1),不会因为输出表格而被干扰。
内容的提问来源于stack exchange,提问作者BestGirl
相关产品推荐
相关产品推荐

