我对如何将函数参数传递给dplyr和ggplot代码感到困惑。
我正在使用dplyr和ggplot2的最新版本
这是我生成代码的代码(清晰度与平均价格)

diamond.plot<- function (data, group, metric) {
    group<- quo(group)
    metric<- quo(metric)
    data() %>% group_by(!! group) %>%
           summarise(price=mean(!! metric)) %>%
           ggplot(aes(x=!! group,y=price))+
           geom_bar(stat='identity')
}

diamond.plot(diamonds, group='clarity', metric='price')


错误:

Error in UseMethod("group_by_") : no applicable method for 'group_by_' applied to an object of class "packageIQR"


对于dplyr的最新版本,不建议使用带下划线的verbs_()。似乎我们应该使用quasures。

我的问题:


有人可以澄清目前的最佳做法吗?
上面的代码有什么问题? (请不要下划线dplyr动词。)
在ggplot中,我知道我们可以使用aes_string(),但就我而言,从函数参数传递aes中的参数之一。


提前致谢。

最佳答案

现在ggplot2 v3.0.0中完全支持Tidy评估,因此不再需要使用aes_aes_string



library(rlang)
library(tidyverse)

diamond_plot <- function (data, group, metric) {
    quo_group  <- sym(group)
    quo_metric <- sym(metric)

    data %>%
        group_by(!! quo_group) %>%
        summarise(price = mean(!! quo_metric)) %>%
        ggplot(aes(x = !! quo_group, y = !! quo_metric)) +
        geom_col()
}

diamond_plot(diamonds, "clarity", "price")




reprex package(v0.2.0)于2018-04-16创建。

关于r - 将函数参数传递给dplyr和ggplot,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45439813/

10-12 17:24
查看更多