在这里:https://rpubs.com/hadley/dplyr-programming他们写了以下内容。
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)
#> ~g1
#> # A tibble: 2 × 2
#> g1 a
#> <dbl> <dbl>
#> 1 1 4.5
#> 2 2 2.0
所以我尝试使用我对函数和数据的想法来复制它。
library(MASS)
not.fun <- function(data, column) {
column <- enquo(column)
data %>% slice(1:10) %>% select(!!column)
}
not.fun(MASS::Cars93, Length)
Error in select(., !!column) : unused argument (!!column)
但是,您猜怎么着,它不起作用。 如何使其工作而不使用字符串? 如果要在某个特定的程序包中写入尽可能多的代码行,我会对可能在base R中完成的结果感兴趣。
答案 0 :(得分:2)
MASS
程序包具有自己的select()
函数。如果在加载dplyr
之后加载MASS,则将掩盖该功能的dplyr
版本。您可能会想知道想要哪个选择功能:
library(MASS)
not.fun <- function(data, column) {
column <- enquo(column)
data %>% slice(1:10) %>% dplyr::select(!!column)
}
not.fun(MASS::Cars93, Length)
答案 1 :(得分:1)
@MrFlick在他的帖子中描述过,这很可能是功能屏蔽的问题。如果该问题已解决,那么也可以使用enquo/!!
代替curl-curly运算符来代替{{..}}
not.fun <- function(data, column) {
data %>%
slice(1:10) %>%
dplyr::select({{column}})
}
not.fun(MASS::Cars93, Length)
# Length
#1 177
#2 195
#3 180
#4 193
#5 186
#6 189
#7 200
#8 216
#9 198
#10 206