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
的问题在于它不支持非标准评估。