如何在R Markdown的knitr循环中输出格式化表格?
问题描述
我知道R Markdown代码块里的results='asis'参数能用来打印循环输出,现在想给多个变量生成样式统一的表格,但用knitr实现时出了问题。我想要生成三个各包含mtcars一行的表格,目前用的代码如下:
YAML 文档头
--- title: "Untitled" author: "Matt" date: '2022-08-13' output: html_document ---
环境设置代码块
{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) library(kableExtra) library(knitr)
循环生成表格的代码块
{r, results = 'asis'} for( i in 1:3 ){ knitr::kable( mtcars[i,] , caption = i ) %>% kable_paper( "hover" , full_width = F ) }
当前运行后没有正确渲染出带样式的表格,而是输出了大量未解析的HTML代码。
解决方案
问题的核心是kableExtra生成的格式化表格需要显式打印,循环里的管道操作结果没有被主动输出,所以要在循环内添加print()函数:
修改后的循环代码:
{r, results = 'asis'} for( i in 1:3 ){ knitr::kable(mtcars[i,], caption = i) %>% kable_paper("hover", full_width = F) %>% print() # 新增这一行,强制输出表格内容 }
原理:kable_paper这类kableExtra的样式函数会返回HTML格式的表格内容,但在循环结构中,R不会自动输出这些返回值。加上print()后,配合results='asis'参数,就能让Markdown直接解析这些HTML代码,最终渲染出三个样式一致的单行表格。
内容的提问来源于stack exchange,提问作者MatthewR
相关产品推荐
相关产品推荐

