是否可以在purrr::map
中使用的函数内使用嵌套变量?
例如,在以下示例中,我希望每个绘图都有一个显示柱面数的标题
library(tidyverse)
plot_mtcars <- function(df, cyl){
ggplot(aes(x = disp, y = mpg), data = df) +
geom_point() +
ggtitle(paste("Cylinders =", cyl))
}
plots <- mtcars %>%
nest(-cyl) %>%
mutate(plot = map(data, ~plot_mtcars(., cyl)))
上面的代码不起作用,因为所有图表都返回:
Cylinders = 6
(而不是6,4,8)
答案 0 :(得分:3)
这里的问题是cyl
是一个向量,所以它在ggtitle
中设置一个字符向量,在这种情况下只使用第一个元素;您需要遍历cyl
并将相应的元素传递给绘图函数:
plots <- mtcars %>%
nest(-cyl) %>%
# here use map2 to pass data and corresponding cyl to the plot function
mutate(plot = map2(data, cyl, ~ plot_mtcars(.x, .y)))
检查图标题:
plots$plot[[1]]$labels$title
# [1] "Cylinders = 6"
plots$plot[[2]]$labels$title
# [1] "Cylinders = 4"
plots$plot[[3]]$labels$title
# [1] "Cylinders = 8"