2

我对 dplyr 函数的参数感到困惑,对标准评估 (SE) 或非标准评估 (NSE) 不太清楚。我只想将一个变量传递给 dplyr::arrange() 但它失败了。但是,传递给 dplyr::select() 有效。

> library(dplyr)
> library(magrittr)
> var_name <- "mpg"
> mtcars %>% as_tibble() %>% dplyr::select(var_name)
# A tibble: 32 x 1
 mpg
 * <dbl>
 1  21.0
 2  21.0
 3  22.8
 4  21.4
 5  18.7
 6  18.1
 7  14.3
 8  24.4
 9  22.8
10  19.2
# ... with 22 more rows
> mtcars %>% as_tibble() %>% dplyr::arrange(var_name)
Error in arrange_impl(.data, dots) : 
  incorrect size (1) at position 1, expecting : 32

我使用 SE 版本搜索了一个解决方案,它可以工作:

> mtcars %>% as_tibble() %>% dplyr::arrange_(var_name)

为什么 dplyr::select() 与 NSE 中的 dplyr::arrange() 不同?

如何在全局环境中修复以下错误?

> as_tibble(mtcars) %>% dplyr::mutate(paste0(var_name,"_Minus1") = mtcars$mpg - 1)
Error: unexpected '=' in "as_tibble(mtcars) %>% dplyr::mutate(paste0(var_name,"_Minus1") ="

谢谢!

4

1 回答 1

1

我们可以使用arrange_atwhich 接受对象

mtcars %>%
   as_tibble() %>%
   dplyr::arrange_at(var_name)

sym或者另一种选择是使用from转换为符号rlang并使用!!

mtcars %>%
   as_tibble() %>%
   dplyr::arrange(!! rlang::sym(var_name))
于 2018-03-01T07:42:11.857 回答