假设我有以下数据集,其中包含要逐一保存的图纸和绘图:
library(tidyverse)
data_set <- iris %>%
nest(data = -Species) %>%
mutate(
plot = map(
data,
~ ggplot(., aes(x = Sepal.Length, y = Sepal.Width)) +
geom_point()
)
)
目前,如果我想保存data_set$plot
和data_set$data
,我必须单独保存:
# save plots
data_set %>%
{
walk2(
.$Species, .$plot,
~ ggsave(
filename = paste0(.x, ".png"),
plot = .y
)
)
}
# save sheets
data_set %>%
{
walk2(
.$Species, .$data,
~ write.csv(
.y,
paste0(.x, ".csv")
)
)
}
问题:
有没有一种方法可以在同一管道中做到这一点?类似于:
data_set %>%
{
# plot saving function
} %>%
{
# sheet saving function
}
甚至
data_set %>%
pivot_longer(
!Species,
names_to = "set",
values_to = "them_all"
) %>%
{
# one function to save them_all
}
您可以在{purrr}
中使用pwalk()
函数
purrr::pwalk(
.l = list(species = data_set$Species,
data = data_set$data,
plot = data_set$plot),
.f = function(species, data, plot){
write.csv(data, paste0(species, ".csv"))
ggsave(filename = paste0(species, ".png"), plot = plot)
}
)