r - 如何使用 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"))
解决方案
我们也可以不split
使用 ting 即使用nest_by
fromdplyr
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))
-输出
推荐阅读
- javascript - 我不允许显示来自新版本 (v2) 的 aDribbble API 的数据
- html - 使用express时没有加载angularjs
- asp.net - http.GET 有效,但 http.post 和 http.put 无效
- eigen - Hermitian 矩阵的 Eigen 中的 ConjugateGradient
- electron - 在 Electron React 应用程序中包含 Bootstrap
- c# - Xamarin.Forms - 使用活动状态关闭 ActivityIndicator
- numpy - 张量的谱范数
- javascript - 在选项卡更改时动态更改 iframe 的高度?
- docker - traefik dnsChallenge 和 httpChallenge(备份)同时
- spring-boot - 使用 Spring Boot 2.0 时将指标导出到文件