r - 使用 dplyr::filter 的 tidyeval 方法是什么?

标签 r dplyr tidyeval

使用 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/

相关文章:

r - 如何将 xpath 传递给 html_nodes()?

algorithm - 如何最好地在 R 中创建定时器函数

r - 使用NSE构造公式

r - 在使用变量调用的函数中实现 mutate

r - 使用公式进行非标准评估

R 使用行和列的公式创建矩阵

r - 使用ggplot2在一个 Canvas 中包含多个图形

R函数在同一列中搜索和计算多个条件?

r - 按第一组元素排序 dplyr

r - 使用 dplyr 根据列名称更改数据框中的值?