R中的标准评估和非标准评估

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R中的标准评估和非标准评估相关的知识,希望对你有一定的参考价值。

我对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") ="

谢谢!

答案

我们可以使用带有物体的arrange_at

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

或者另一种选择是使用sym中的rlang转换为符号并使用!!进行评估

mtcars %>%
   as_tibble() %>%
   dplyr::arrange(!! rlang::sym(var_name))

以上是关于R中的标准评估和非标准评估的主要内容,如果未能解决你的问题,请参考以下文章

r 用dplyr进行标准评估总结。

R:基本 R 函数的整洁评估?

依赖于 R 中非标准评估的函数的包装器

R语言评估回归模型预测因素(变量特征)的相对重要性(Relative importance)将回归模型的预测变量标准化(scale)之后构建模型获得标准化回归系数来评估预测变量的相对重要性

评估标准的四个方面

使用标准评估更改 dplyr::count 中的变量名称