我对如何将函数参数传递给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/