使用purrr::imap()在Flexdashboard输出sjPlot交叉表遇HTML转义问题
解决Flexdashboard中用purrr批量渲染sjPlot交叉表的问题
问题核心是RMarkdown默认会转义HTML输出,且imap返回的列表无法被正确渲染。以下是修正后的代码和说明:
修正后的完整代码
--- title: "Multiple Crosstabs Example" output: flexdashboard::flex_dashboard: orientation: columns vertical_layout: fill --- ```{r setup, include=FALSE} library(dplyr) library(purrr) library(flexdashboard) library(sjPlot)
Column {data-width=650}
Crosstabs
# 转换mtcars中的变量为因子 mycars <- mtcars %>% mutate(across(c(cyl, vs, am, gear, carb), as.factor)) # 批量生成并渲染交叉表 mycars %>% select_if(is.factor) %>% select(-cyl) %>% iwalk(\(x, cname) { # 生成交叉表 xt <- tab_xtab( mycars$cyl, x, var.labels = c("Cylinders", cname), show.row.prc = TRUE, show.summary = TRUE, show.na = TRUE ) # 打印表格(自动输出正确的HTML) print(xt) # 添加换行分隔不同表格 cat("\n\n") })
## 关键修改点 1. **代码块添加`results='asis'`**:这个选项告诉knitr直接输出原始HTML内容,不进行转义,避免出现带转义符的字符串。 2. **用`iwalk`替代`imap`**:`iwalk`用于执行"副作用"操作(比如打印输出),不会返回需要被解析的列表,而是逐个处理并输出每个表格的HTML。 3. **直接打印完整的`tab_xtab`对象**:sjPlot为这类表格对象提供了专门的打印方法,会自动输出可渲染的HTML,比单独提取`xt$knitr`更稳定。 内容的提问来源于stack exchange,提问作者morphatic
相关产品推荐
相关产品推荐

