使用 foo(c("b"))
调用下面的函数.输出显示为内联。
什么是正确的写作方式df %>% filter(!!x > (!!x))
?
我已经包含了一个使用 mutate
的例子。以整洁的风格与 filter
形成对比.
foo <- function(variables) {
x <- rlang::sym(variables[[1]])
print(x)
#> b
print(typeof(x))
#> [1] "symbol"
df <- data_frame(a = 1, b = 2)
print(df %>% mutate(!!x := 100 + !!x))
#> # A tibble: 1 x 2
#> a b
#> <dbl> <dbl>
#> 1 1 102
print(df %>% filter(!!x > (!!x)))
#> Error in !x : invalid argument type
print(df %>% filter(magrittr::is_greater_than(!!x, !!x)))
#> # A tibble: 0 x 2
#> # ... with 2 variables: a <dbl>, b <dbl>
}
最佳答案
除了一个小错别字外,您已经完成了大部分工作,过滤器语句中的圆括号应该在变量上而不是值上。
print(df %>% filter((!!x) > !!x))
#> # A tibble: 0 x 2
#> # ... with 2 variables: a <dbl>, b <dbl>
关于r - 使用 dplyr::filter 的 tidyeval 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46086755/