如何在Quarto代码块中打印多个gt表格?
在Quarto中批量渲染gt表格列表的解决方案
我有一个gt表格列表,想要在Quarto中展示出来。之前在RMarkdown里,只需在设置了results = "asis"的代码块内使用walk(tabs, print)语句就能实现,但在Quarto中尝试以下代码时渲染失败:
--- title: "Untitled" format: html editor: source --- ```{r} library(tidyverse) library(gt) df <- mtcars[1:5, 1:2] tab <- gt(df)
#| results: asis rep(list(tab), 3) %>% walk(print)
报错信息(已翻译为中文):
运行过滤器 C:/Users/xxxxx/AppData/Local/Programs/Quarto/share/filters/quarto-pre/quarto-pre.lua 时出错:
.../Programs/Quarto/share/filters/quarto-pre/quarto-pre.lua:2555: 尝试拼接 nil 值(局部变量 'v')
堆栈跟踪:
.../Programs/Quarto/share/filters/quarto-pre/quarto-pre.lua:2562: 在函数 <.../Programs/Quarto/share/filters/quarto-pre/quarto-pre.lua:2560> 中
### 解决方案 问题根源在于Quarto对`print(gt_object)`输出的处理逻辑和RMarkdown存在差异。可以通过将gt表格转为HTML字符串后直接输出的方式解决: 修改后的代码如下: ```yaml --- title: "Untitled" format: html editor: source --- ```{r} library(tidyverse) library(gt) df <- mtcars[1:5, 1:2] tab <- gt(df)
#| results: asis rep(list(tab), 3) %>% walk(function(x) { # 将gt表格转为HTML字符串并输出 cat(as_raw_html(x)) # 可选:添加换行标签让表格之间间隔更清晰 cat("<br><br>") })
说明
gt::as_raw_html()会把gt对象转换为Quarto能够正确解析的原生HTML代码cat()直接输出这些HTML内容,配合代码块的results = "asis"设置,Quarto会将输出当作页面的一部分渲染- 额外添加的
<br><br>标签可以让多个表格之间保持合适的间距,可根据需求选择是否保留
内容的提问来源于stack exchange,提问作者Arthur
相关产品推荐
相关产品推荐

