在我自己的函数中使用 summarise_ 和 group_by_
Usage summarise_ and group_by_ in my own function
我想创建一个简单的函数,它将使用 summarise_
和 group_by_
函数。我知道评估不规范存在问题,但我可以解决它。
library(dplyr)
test_function <- function(.data, ..., variable){
dots <- quote(mean(substitute(variable)))
group_by_(.data,.dots = lazyeval::lazy_dots(...)) %>%
summarise_(.dots = dots)
}
但是当我尝试这个时:
test_function(ggplot2::diamonds, cut, clarity, variable = price)
没用。
谢谢,
你的问题是你的quote()
。引号转义 substitute()
所以它不是 运行 您想要的方式。如果您使用 bquote()
代替,您可以评估替代并将结果插入表达式以获得您想要的
test_function <- function(.data, ..., variable){
dots <- bquote(mean(.(substitute(variable))))
group_by_(.data,.dots = lazyeval::lazy_dots(...)) %>%
summarise_(.dots = dots)
}
test_function(diamonds, cut, clarity, variable = price)
# Source: local data frame [40 x 3]
# Groups: cut
#
# cut clarity mean(price)
# 1 Fair I1 3703.533
# 2 Fair SI2 5173.916
# 3 Fair SI1 4208.279
# 4 Fair VS2 4174.724
# 5 Fair VS1 4165.141
我没有使用复杂的短语 bquote(mean(.(substitute(variable))))
,而是找到了 interp
可以稍微简化符号的函数。
...
interp(~mean(variable), variable = substitute(variable))
...
我想创建一个简单的函数,它将使用 summarise_
和 group_by_
函数。我知道评估不规范存在问题,但我可以解决它。
library(dplyr)
test_function <- function(.data, ..., variable){
dots <- quote(mean(substitute(variable)))
group_by_(.data,.dots = lazyeval::lazy_dots(...)) %>%
summarise_(.dots = dots)
}
但是当我尝试这个时:
test_function(ggplot2::diamonds, cut, clarity, variable = price)
没用。
谢谢,
你的问题是你的quote()
。引号转义 substitute()
所以它不是 运行 您想要的方式。如果您使用 bquote()
代替,您可以评估替代并将结果插入表达式以获得您想要的
test_function <- function(.data, ..., variable){
dots <- bquote(mean(.(substitute(variable))))
group_by_(.data,.dots = lazyeval::lazy_dots(...)) %>%
summarise_(.dots = dots)
}
test_function(diamonds, cut, clarity, variable = price)
# Source: local data frame [40 x 3]
# Groups: cut
#
# cut clarity mean(price)
# 1 Fair I1 3703.533
# 2 Fair SI2 5173.916
# 3 Fair SI1 4208.279
# 4 Fair VS2 4174.724
# 5 Fair VS1 4165.141
我没有使用复杂的短语 bquote(mean(.(substitute(variable))))
,而是找到了 interp
可以稍微简化符号的函数。
...
interp(~mean(variable), variable = substitute(variable))
...