使用map2生成表格后,kable丢失单个表格名称的问题求助
问题描述
使用map2生成了包含9个带命名的频率表格的列表,但直接用kable格式化整个列表时,单个表格的名称丢失,只能设置整体标题,无法为每个表格添加单独的标题。
解决方案
通过purrr::imap()遍历带命名的表格列表,为每个表格单独设置对应标题,再拼接输出所有格式化后的表格,具体实现如下:
1. 保留原表格生成逻辑
# 定义目标变量与分组变量 target_var <- c("compliment_perc_index_bloc_org_plan_migpunts", "compliment_perc_index_bloc_pressupostari_migpunts", "compliment_perc_index_bloc_contractacio_migpunts", "compliment_perc_index_bloc_serveis_migpunts", "compliment_perc_index_bloc_ajudes_subven_migpunts", "compliment_perc_index_bloc_info_electes_migpunts", "compliment_perc_index_bloc_patrimoni_migpunts", "compliment_perc_index_bloc_consultes_migpunts", "compliment_perc_index_bloc_info_rell_jurid_migpunts" ) group_var <- c("Tramspoblacio") # 构建辅助数据框 df1 = expand.grid(target_var, group_var, stringsAsFactors = F) # 生成带命名的百分比表格列表 index_blocs_map_grups_compliment <- map2(df1$Var2, df1$Var1, ~ round(prop.table(table(per_stack[, .x], per_stack[, .y]), margin=1)*100,1)) %>% purrr::set_names(df1$Var1)
2. 为每个表格添加单独标题并格式化
library(kableExtra) library(purrr) # 遍历列表,为每个表格设置对应名称作为标题,应用kable样式 formatted_tables <- imap(index_blocs_map_grups_compliment, function(table, table_name) { kable(table, caption = paste0("<center><strong>", table_name, "</strong><br>Percentatge segons grup de població</center>")) %>% kable_styling(bootstrap_options = c("striped", "hover")) }) # 逐个输出所有格式化后的表格 walk(formatted_tables, print)
关键说明
imap()同时传递列表元素(表格)和元素名称(原变量名),直接将变量名作为对应表格的标题。walk()用于逐个打印格式化后的表格,确保每个表格在Markdown中独立显示并带有专属标题。- 可根据需求修改
caption中的文本格式,比如简化标题或调整排版。
内容的提问来源于stack exchange,提问作者FrancoBattiato
相关产品推荐
相关产品推荐

