在函数内使用嵌套变量

时间:2018-06-17 03:43:21

标签: r nested purrr

是否可以在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)

1 个答案:

答案 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"