在R语言中,能否通过单一流水线保存嵌套数据中的绘图与表格?
如何在同一流水线中批量保存嵌套数据集中的表格和绘图?
先看你的数据集构建代码:
library(tidyverse) data_set <- iris %>% nest(data = -Species) %>% mutate( plot = map( data, ~ ggplot(., aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() ) )
你目前是分开执行两次walk2来保存绘图和表格,完全可以把这两步整合到同一流水线里,甚至可以用pivot_longer统一处理,下面给你两种实现方式:
方法一:流水线串联两次保存操作
利用walk系列函数会返回输入数据的特性,在每个保存块的末尾返回原数据,就能让管道继续传递:
data_set %>% # 保存绘图 { walk2(.$Species, .$plot, ~ ggsave(filename = paste0(.x, ".png"), plot = .y)) . # 返回原数据集,供后续步骤使用 } %>% # 保存数据表格 { walk2(.$Species, .$data, ~ write.csv(.y, file = paste0(.x, ".csv"), row.names = FALSE)) . }
方法二:用pivot_longer统一处理所有内容
先把data和plot列转成键值对形式,再通过一次遍历完成不同类型的保存:
data_set %>% pivot_longer(cols = -Species, names_to = "type", values_to = "content") %>% pwalk(function(Species, type, content) { if (type == "plot") { ggsave(filename = paste0(Species, ".png"), plot = content) } else { write.csv(content, file = paste0(Species, ".csv"), row.names = FALSE) } })
两种方法都能实现你的需求:第一种逻辑清晰,分开处理不同类型的内容;第二种更简洁,用统一的逻辑完成所有保存操作,选哪种看你个人习惯。
内容的提问来源于stack exchange,提问作者ErwinTATP
相关产品推荐
相关产品推荐

