示例中的问题:使用 dplyr 编程
Issue with Example in : Programming with dplyr
参考:http://dplyr.tidyverse.org/articles/programming.html
此代码运行良好:
df <- tibble(
g1 = c(1, 1, 2, 2, 2),
g2 = c(1, 2, 1, 2, 1),
a = sample(5),
b = sample(5)
)
my_summarise <- function(df, group_by) {
group_by <- enquo(group_by)
print(group_by)
df %>%
group_by(!!group_by) %>%
summarise(a = mean(a))
}
my_summarise(df, g1)
但是,如果我们将这个函数包装在另一个函数中并进行调用,它是行不通的。是因为名字只能通过一级吗?
wrapped_my_Summarize <- function(wdf, w_group_by){
my_summarise(wdf, w_group_by)
}
wrapped_my_Summarize(df, g1)
总的来说,我觉得上面的例子比较冒险
用enquo
将其从符号转换为quosure,然后计算my_summarise
的函数参数(!!
)
wrapped_my_Summarize <- function(wdf, w_group_by){
w_group_by <- enquo(w_group_by)
my_summarise(wdf, !! w_group_by)
}
wrapped_my_Summarize(df, g1)
# A tibble: 2 x 2
# g1 a
# <dbl> <dbl>
#1 1.00 2.00
#2 2.00 3.67
identical(wrapped_my_Summarize(df, g1), my_summarise(df, g1))
#[1] TRUE
参考:http://dplyr.tidyverse.org/articles/programming.html
此代码运行良好:
df <- tibble(
g1 = c(1, 1, 2, 2, 2),
g2 = c(1, 2, 1, 2, 1),
a = sample(5),
b = sample(5)
)
my_summarise <- function(df, group_by) {
group_by <- enquo(group_by)
print(group_by)
df %>%
group_by(!!group_by) %>%
summarise(a = mean(a))
}
my_summarise(df, g1)
但是,如果我们将这个函数包装在另一个函数中并进行调用,它是行不通的。是因为名字只能通过一级吗?
wrapped_my_Summarize <- function(wdf, w_group_by){
my_summarise(wdf, w_group_by)
}
wrapped_my_Summarize(df, g1)
总的来说,我觉得上面的例子比较冒险
用enquo
将其从符号转换为quosure,然后计算my_summarise
!!
)
wrapped_my_Summarize <- function(wdf, w_group_by){
w_group_by <- enquo(w_group_by)
my_summarise(wdf, !! w_group_by)
}
wrapped_my_Summarize(df, g1)
# A tibble: 2 x 2
# g1 a
# <dbl> <dbl>
#1 1.00 2.00
#2 2.00 3.67
identical(wrapped_my_Summarize(df, g1), my_summarise(df, g1))
#[1] TRUE