首页 > 解决方案 > 如何使用 kable 和 map 将多个表保存为图像?

问题描述

我正在尝试从单个数据框创建多个表并将它们保存为图像。当我尝试使用save_kable出现问题来保存表格时。这是我的代码的代理:

table_list  %>%
  group_split(compound, .keep = FALSE) %>%
  setNames(unique(table_list$compound)) %>%
   map(~save_kable(file = paste0('output/final_plots/1. model performance/',
                            names(.),
                            'table_metrics.png'),
              width = 6, height = 4, 
              bs_theme = 'journal', 
              self_contained = T, 
              x = kbl(., booktabs = T, align = c('l','l', 'c')) %>%
   kable_styling() %>%
    add_header_above(c(' ' = 1,
                       ' ' = 1,
                       'Metrics' = 5))))

这个想法是为每个拆分创建一个表并将其保存为 png。有什么想法可能是错的吗?

这是我的数据框

structure(list(`Avg type` = c("hourly", "hourly", "hourly", "hourly", 
"hourly", "hourly", "hourly", "hourly", "hourly", "hourly", "hourly", 
"hourly", "hourly", "hourly", "hourly", "hourly", "hourly", "hourly", 
"hourly", "hourly", "daily", "daily", "daily", "daily", "daily", 
"daily", "daily", "daily", "daily", "daily", "daily", "daily", 
"daily", "daily", "daily", "daily", "daily", "daily", "daily", 
"daily"), Scenario = c("CCTM EFmaps", "CCTM PFT", "GC EFmaps", 
"GC EFmaps LD", "GC PFT", "CCTM EFmaps", "CCTM PFT", "GC EFmaps", 
"GC EFmaps LD", "GC PFT", "CCTM EFmaps", "CCTM PFT", "GC EFmaps", 
"GC EFmaps LD", "GC PFT", "CCTM EFmaps", "CCTM PFT", "GC EFmaps", 
"GC EFmaps LD", "GC PFT", "CCTM EFmaps", "CCTM PFT", "GC EFmaps", 
"GC EFmaps LD", "GC PFT", "CCTM EFmaps", "CCTM PFT", "GC EFmaps", 
"GC EFmaps LD", "GC PFT", "CCTM EFmaps", "CCTM PFT", "GC EFmaps", 
"GC EFmaps LD", "GC PFT", "CCTM EFmaps", "CCTM PFT", "GC EFmaps", 
"GC EFmaps LD", "GC PFT"), compound = c("ISOP", "ISOP", "ISOP", 
"ISOP", "ISOP", "MACR_MVK", "MACR_MVK", "MACR_MVK", "MACR_MVK", 
"MACR_MVK", "MTP", "MTP", "MTP", "MTP", "MTP", "O3", "O3", "O3", 
"O3", "O3", "ISOP", "ISOP", "ISOP", "ISOP", "ISOP", "MACR_MVK", 
"MACR_MVK", "MACR_MVK", "MACR_MVK", "MACR_MVK", "MTP", "MTP", 
"MTP", "MTP", "MTP", "O3", "O3", "O3", "O3", "O3"), `Pearson coeff.` = c(0.73, 
0.74, 0.76, 0.76, 0.88, 0.34, 0.43, 0.66, 0.66, 0.79, 0.46, 0.48, 
0.26, 0.19, 0.3, 0.52, 0.64, 0.64, 0.63, 0.65, 0.83, 0.83, 0.89, 
0.9, 0.94, 0.71, 0.79, 0.89, 0.89, 0.96, 0.45, 0.48, 0.31, 0.28, 
0.41, 0.14, 0.66, 0.61, 0.61, 0.63), `Mean bias` = c(4.81, 0.23, 
0.18, 0.18, -0.19, 0.45, -0.08, 0.36, 0.36, -0.03, 0.53, 0.32, 
-0.07, -0.09, -0.08, 1.63, 0.27, 5.12, 5.07, 4, 5.22, 0.25, 0.2, 
0.2, -0.2, 0.44, -0.09, 0.36, 0.36, -0.03, 0.58, 0.35, -0.07, 
-0.09, -0.08, 1.44, 0.58, 5.36, 5.32, 4.19), `Mean error` = c(4.82, 
0.33, 0.43, 0.43, 0.21, 0.54, 0.18, 0.43, 0.43, 0.15, 0.54, 0.34, 
0.1, 0.1, 0.09, 9.26, 7.14, 8.25, 8.22, 7.17, 5.22, 0.27, 0.4, 
0.4, 0.2, 0.44, 0.12, 0.39, 0.39, 0.07, 0.58, 0.35, 0.09, 0.1, 
0.08, 6, 3.63, 6.57, 6.52, 5.39), RMSE = c(0.37, 0.03, 0.05, 
0.05, 0.01, 0.04, 0.02, 0.04, 0.04, 0.01, 0.04, 0.02, 0.01, 0.01, 
0.01, 0.51, 0.37, 0.43, 0.43, 0.37, 1.37, 0.07, 0.16, 0.16, 0.04, 
0.11, 0.05, 0.12, 0.12, 0.02, 0.13, 0.08, 0.02, 0.02, 0.02, 1.32, 
0.79, 1.37, 1.36, 1.14), `Scatter Index` = c(1.1, 0.07, 0.13, 
0.13, 0.04, 0.17, 0.08, 0.17, 0.17, 0.05, 0.31, 0.18, 0.06, 0.06, 
0.06, 0.03, 0.02, 0.02, 0.02, 0.02, 3.89, 0.21, 0.44, 0.44, 0.12, 
0.46, 0.21, 0.53, 0.53, 0.08, 1.03, 0.61, 0.16, 0.17, 0.15, 0.07, 
0.04, 0.07, 0.07, 0.06)), row.names = c(NA, -40L), class = c("tbl_df", 
"tbl", "data.frame"))

标签: r

解决方案


我们也可以不split使用 ting 即使用nest_byfromdplyr

library(dplyr)
library(stringr)
table_list %>%
    nest_by(compound) %>% 
    mutate(filename = file.path('output/final_plots/1. model performance', 
          str_c(compound, 'table_metrics.png')),
     new = save_kable(file = filename, bs_theme = "journal", 
      self_contained = TRUE, x = kbl(data, booktabs = TRUE,
            align = c('l','l', 'c')) %>%
            kable_styling))

-输出

在此处输入图像描述


推荐阅读