You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarto文档中purrr生成gt表格仅显示HTML代码的解决求助

解决Quarto中用purrr生成gt表格仅显示HTML代码的问题

问题原因

使用purrr::walk() + print()组合生成gt表格时,Quarto的渲染引擎无法正确识别gt表格对象,直接输出了表格的原始HTML代码,而非渲染后的可视化表格。这是因为在非交互式的文档渲染环境中,print()无法触发knitr对gt对象的特殊渲染逻辑。

解决方案

有两种简单的修复方式,任选其一即可:

方法1:使用knitr::knit_print()显式触发渲染

通过map()生成表格列表后,用walk()调用knit_print()来告诉knitr如何渲染gt对象:

library(gt)
library(dplyr)
library(purrr)
library(knitr)

ds_sep <- data.frame(
  column_name = c("02", "02", "01"),
  var1 = c("A", "B", "C"),
  var2 = c(1, 2, 3)
)

var_sociodemo <- c("var1", "var2")

table_sociodemo <- function(data, column, value) {
  data %>%
    filter(!!sym(column) == value) %>%
    gt()
}

# 生成表格并触发渲染
tables <- map(var_sociodemo, ~table_sociodemo(ds_sep, "column_name", .x))
walk(tables, knit_print)

方法2:改用普通for循环(更直观)

直接用for循环遍历变量列表,循环内生成的gt表格会被knitr自动识别并渲染:

library(gt)
library(dplyr)

ds_sep <- data.frame(
  column_name = c("02", "02", "01"),
  var1 = c("A", "B", "C"),
  var2 = c(1, 2, 3)
)

var_sociodemo <- c("var1", "var2")

table_sociodemo <- function(data, column, value) {
  data %>%
    filter(!!sym(column) == value) %>%
    gt()
}

# 直接循环生成表格
for (var in var_sociodemo) {
  table_sociodemo(ds_sep, "column_name", var)
}

额外优化

可以给每个表格添加标题,方便区分:

table_sociodemo <- function(data, column, value) {
  data %>%
    filter(!!sym(column) == value) %>%
    gt() %>%
    tab_header(title = paste("按", value, "筛选的结果"))
}

内容的提问来源于stack exchange,提问作者Erik De Luca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:34:56