RMarkdown调用render()无法输出嵌入函数内的gt表格问题
问题原因与解决方法
问题出在非交互式环境下gt表格的输出机制:当用rmarkdown::render()生成HTML时,属于非交互式执行场景,直接调用print()输出gt表格,无法将表格的HTML代码正确传递给rmarkdown的输出流,导致表格不显示;而RStudio的Knit按钮或控制台属于交互式环境,gt的print()方法会自动适配渲染逻辑,所以能正常显示。
修改方案
调整函数逻辑,用gt::as_raw_html()将gt表格转换为HTML字符串,再通过cat()输出,配合代码块的results = "asis"参数,让rmarkdown直接解析这些HTML代码:
--- title: "illustrate problem" output: html_document --- Define a short function that prints two summaries: ```{r step_1} library(tidyverse); library(gt) egads <- function(df) { # 转换为HTML并输出第一个表格 df %>% select(mpg, cyl) %>% gt() %>% as_raw_html() %>% cat() # 添加换行分隔两个表格 cat("\n\n") # 转换为HTML并输出第二个表格 df %>% select(disp, hp) %>% gt() %>% as_raw_html() %>% cat() }
Next I exercise the function:
egads(mtcars)
### 原理说明 `as_raw_html()`会直接提取gt表格对应的HTML代码,`cat()`将这些代码输出到rmarkdown的输出流中,`results = "asis"`告诉rmarkdown不要对输出内容进行转义,直接按HTML规则渲染,这样就能在`render()`生成的HTML文件中正常显示两个表格了。 内容的提问来源于stack exchange,提问作者Rick Donnelly
相关产品推荐
相关产品推荐

