【问题标题】:Tidyeval in a function with dplyr and ggplot2使用 dplyr 和 ggplot2 的函数中的 Tidyeval
【发布时间】:2019-09-26 03:56:23
【问题描述】:

所以我使用:= 创建名称,但我想在ggplot2 中将其用作y,这似乎不起作用。

library(tidyverse)
date_group_plot_line <- function(df, group_col, summarise_col) {
  group_col  <-enquo(group_col)
  summarise_col <- enquo(summarise_col)

  name <- paste0(rlang::quo_name(summarise_col), "_", "mean")

  df %>%
    dplyr::group_by(!!group_col) %>%
    dplyr::summarise( !!name := mean(!!summarise_col)) %>%
    dplyr::filter(!is.na(!!group_col)) %>%
    ggplot2::ggplot(ggplot2::aes(x=!!group_col, y= !!name )) +
    ggplot2::geom_point()
}

date_group_plot_line(diamonds, cut, price)
#> Warning: package 'bindrcpp' was built under R version 3.4.4

reprex package (v0.2.0) 于 2019 年 5 月 8 日创建。

【问题讨论】:

  • 你传递了一个常量字符串(一个名字)作为y审美。而是使用aes(y = !!sym(name))aes(y = .data[[name]])

标签: r ggplot2 dplyr rlang tidyeval


【解决方案1】:

在问题的评论部分中@LionelHenry 的帮助下,这是我自己的答案:

library(tidyverse)

date_group_plot_line <- function(df, group_col, summarise_col) {
  group_col  <-enquo(group_col)
  summarise_col <- enquo(summarise_col)

  name <- paste0(rlang::quo_name(summarise_col), "_", "mean")

  df %>%
    dplyr::group_by(!!group_col) %>%
    dplyr::summarise( !!name := mean(!!summarise_col)) %>%
    dplyr::filter(!is.na(!!group_col)) %>%
    ggplot2::ggplot(ggplot2::aes(x=!!group_col, y= !!rlang::sym(name) )) +
    ggplot2::geom_point()
}

date_group_plot_line(diamonds, cut, price)
#> Warning: package 'bindrcpp' was built under R version 3.4.4

reprex package (v0.2.0) 于 2019 年 5 月 8 日创建。

【讨论】:

    猜你喜欢
    • 2019-04-15
    • 1970-01-01
    • 2021-01-18
    • 2020-05-31
    • 2017-09-10
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    相关资源
    最近更新 更多