使用pwalk批量生成自定义tab_style的gt表格时遇错求助
解决pwalk批量生成gt表格时tab_style自定义参数报错问题
报错原因
你遇到的missing "locals" argument错误,核心是用!!展开quos()打包的参数集合方式不对。tab_style需要明确接收style和locations两个参数,而quos()打包的是这两个参数的组合集合,单感叹号!!无法正确解析这种多参数结构,必须用**三重感叹号!!!**来批量展开参数。
可复现数据与修正代码
1. 准备测试数据
library(tidyverse) library(gt) # 构造批量处理的 tibble data_tbl <- tibble( table_name = c("table1", "table2"), data = list( mtcars %>% head(3), iris %>% head(3) ), # 用quos打包每个表格对应的tab_style参数 especifico = list( quos( style = cell_fill(color = "lightblue"), locations = cells_body(columns = mpg) ), quos( style = cell_text(weight = "bold"), locations = cells_body(columns = Sepal.Length) ) ) )
2. 修正后的批量处理代码
# 用pwalk批量生成并保存gt表格 data_tbl %>% pwalk(function(table_name, data, especifico) { data %>% gt() %>% tab_style(!!!especifico) %>% # 关键:用!!!展开quos打包的参数 gtsave(filename = paste0(table_name, ".html")) })
扩展:单个表格添加多组样式
如果需要给单个表格设置多组不同的样式,只需把多组quos()打包的参数放到一个子列表里,再通过walk循环叠加样式:
# 构造含多组样式的测试数据 data_tbl <- tibble( table_name = c("multi_style_table"), data = list(mtcars %>% head(3)), especifico = list( list( quos(style = cell_fill(color = "lightblue"), locations = cells_body(columns = mpg)), quos(style = cell_text(weight = "bold"), locations = cells_body(columns = hp)), quos(style = cell_borders(sides = "all"), locations = cells_body(columns = disp)) ) ) ) # 批量处理逻辑 data_tbl %>% pwalk(function(table_name, data, especifico) { # 初始化gt表格 gt_table <- data %>% gt() # 遍历多组样式参数,叠加到表格上 especifico %>% walk(~ gt_table <<- gt_table %>% tab_style(!!!.x)) # 保存表格 gt_table %>% gtsave(filename = paste0(table_name, ".html")) })
内容的提问来源于stack exchange,提问作者user123456
相关产品推荐
相关产品推荐

