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
相关产品推荐
相关产品推荐

