将 `tidyeval` 与 exposition pipe operator 一起使用
using `tidyeval` with the exposition pipe operator
我似乎无法弄清楚如何将 magrittr
中的 %$%
运算符与 tidyeval
一起使用。这是此问题的最小可重现示例:
table
与 tidyeval
之外的说明运算符一起工作
library(magrittr)
print(mtcars %$% table(am))
#> am
#> 0 1
#> 19 13
table
不适用于 tidyeval
的说明运算符
foo <- function(data, x) {
# works with pipe operator
print(data %>% dplyr::pull({{ x }}))
# doesn't with exposition operator
data %$% table({{ x }})
}
foo(mtcars, am)
#> [1] 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1
#> Error in table({: object 'am' not found
dplyr::pull
对其参数使用整洁的评估。 table
(作为基本 R 函数)没有。 这就是为什么 tidy evaluation 适用于前者而不适用于后者。这与管道运算符无关。
我似乎无法弄清楚如何将 magrittr
中的 %$%
运算符与 tidyeval
一起使用。这是此问题的最小可重现示例:
table
与 tidyeval
之外的说明运算符一起工作
library(magrittr)
print(mtcars %$% table(am))
#> am
#> 0 1
#> 19 13
table
不适用于 tidyeval
的说明运算符
foo <- function(data, x) {
# works with pipe operator
print(data %>% dplyr::pull({{ x }}))
# doesn't with exposition operator
data %$% table({{ x }})
}
foo(mtcars, am)
#> [1] 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1
#> Error in table({: object 'am' not found
dplyr::pull
对其参数使用整洁的评估。 table
(作为基本 R 函数)没有。 这就是为什么 tidy evaluation 适用于前者而不适用于后者。这与管道运算符无关。