R-将参数传递给包装器中的'dplyr::select()'

R-将参数传递给包装器中的'dplyr::select()',r,dplyr,purrr,R,Dplyr,Purrr,我有一个使用dplyr::select()的包装器函数,但是当我试图使用它按名称选择列时,它会抛出一个对象*未找到错误。我知道这与select()使用准旋转的方式有关,但我不知道确切的原因 以下是我尝试使用作为映射器的步骤: fun1 = as_mapper(~select(.x, .y)) fun1(iris, Species) Error in .f(.x[[i]], ...) : object 'Species' not found 使用基函数表示法: fun2 = function(

我有一个使用
dplyr::select()
的包装器函数,但是当我试图使用它按名称选择列时,它会抛出一个
对象*未找到错误
。我知道这与
select()
使用准旋转的方式有关,但我不知道确切的原因

以下是我尝试使用
作为映射器的步骤:

fun1 = as_mapper(~select(.x, .y))
fun1(iris, Species)

Error in .f(.x[[i]], ...) : object 'Species' not found
使用基函数表示法:

fun2 = function(dat, x) {select(substitute(dat), substitute(x))} 
fun2(iris, Species:Sepal.Length)

Error in UseMethod("select_") : 
  no applicable method for 'select_' applied to an object of class "name"

如果有人能解释一下为什么会出现这些错误,我将不胜感激。

我相信这与R中的非标准评估(NSE)有关。为什么不尝试使用
rlang
来处理引用的
dplyr
函数呢

库(magrittr)

fun2
因为映射程序
需要一个字符向量(或数字用于基于数字的索引)。调用
fun1(iris,“Species”)
fun1(iris,5)
有效,但当
Species
作为对象(可能不存在于环境中)的
name
提供时无效。为真,但为什么
substitute()
不解决此问题?使用最新版本的
dplyr
您将使用
fun3=函数(dat,x){select({dat},{{x}});fun3(鸢尾属,种:萼片长)
。替代品的问题是它发生得太晚了。
as\u mapper
的问题在于它不支持非标准评估。