我对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") ="
谢谢!
1 回答
我们可以使用
arrange_at
来获取对象或者另一种选择是从
rlang
转换为sym
的符号,并使用!!
进行评估