Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 是否有方法将带有逻辑运算符(!=、>;、<;)的参数传递给函数?_R_Function_Dplyr - Fatal编程技术网

R 是否有方法将带有逻辑运算符(!=、>;、<;)的参数传递给函数?

R 是否有方法将带有逻辑运算符(!=、>;、<;)的参数传递给函数?,r,function,dplyr,R,Function,Dplyr,tolower(arg)中的错误:未找到对象“biomarker”当然有一种方法:运算符是R中的正则函数,您可以像任何其他函数一样传递它们 唯一复杂的是,运算符是非语法名称,因此不能“按原样”传递它们,这会混淆解析器。相反,您需要用反勾号将它们包装起来,以便在需要名称的地方使它们的使用在语法上有效: create_c(df = bsl_all_nsclc, line_number > 2) create_c(df, biomarker != "positive)

tolower(arg)中的错误:未找到对象“biomarker”

当然有一种方法:运算符是R中的正则函数,您可以像任何其他函数一样传递它们

唯一复杂的是,运算符是非语法名称,因此不能“按原样”传递它们,这会混淆解析器。相反,您需要用反勾号将它们包装起来,以便在需要名称的地方使它们的使用在语法上有效:

create_c(df = bsl_all_nsclc,
      line_number > 2)

create_c(df, biomarker != "positive)
filter\u something=函数(值,op){
op(数值,13)
}
过滤某物(汽车$speed,`>`)
过滤某物(汽车$speed,`%
过滤器({expr}})
}
过滤某物2(汽车,速度<13)
这里的“秘密酱汁”是
{…}
语法。这是因为来自'dplyr'的
过滤器
接受未计算的参数,并通过将其转换为(有效的)
!!enexpr(expr)
来处理
{expr}
。也就是说:
expr
首先是“解除的”:它被显式标记为未计算,名称
expr
被它绑定到的未计算表达式所替换(
speed<13
)。接下来,这个未计算表达式是不带引号的。也就是说,包装是“剥离的”在
filter
中处理未赋值表达式本身,就像它作为
filter(.data,speed<13)
传递一样。换句话说,在调用表达式中,名称
expr
speed<13
替换


有关更详细的解释,请参阅小插图。

当然有一种方法:运算符是R中的常规函数,您可以像其他函数一样传递它们

唯一复杂的是,运算符是非语法名称,因此您不能按“原样”传递它们,这会使解析器感到困惑。相反,您需要将它们包装在反勾中,以便在需要名称的地方使它们的使用在语法上有效:

create_c(df = bsl_all_nsclc,
      line_number > 2)

create_c(df, biomarker != "positive)
filter\u something=函数(值,op){
op(数值,13)
}
过滤某物(汽车$speed,`>`)
过滤某物(汽车$speed,`%
过滤器({expr}})
}
过滤某物2(汽车,速度<13)
这里的“秘密酱汁”是
{…}
语法。这是因为来自'dplyr'的
过滤器
接受未计算的参数,并通过将其转换为(有效的)
!!enexpr(expr)
来处理
{expr}
。也就是说:
expr
首先是“解除的”:它被显式标记为未计算,名称
expr
被它绑定到的未计算表达式所替换(
speed<13
)。接下来,这个未计算表达式是不带引号的。也就是说,包装是“剥离的”在
filter
中处理未赋值表达式本身,就像它作为
filter(.data,speed<13)
传递一样。换句话说,在调用表达式中,名称
expr
speed<13
替换


要获得更全面的解释,请参考小插图。

也许您可以切换到以字符串形式提供筛选参数,如
“biomarker!=“positive”
,然后使用
eval(parse(text=…))
@Jonas通过字符串执行此操作在R中是不必要的,实际上是一种反模式。也许您可以切换到以字符串形式提供筛选器参数,如
“biomarker!=“positive”
,然后使用
eval(parse(text=…)
@Jonas通过字符串执行此操作在R中是不必要的,实际上是一种反模式。
filter_something = function (value, op) {
    op(value, 13)
}


filter_something(cars$speed, `>`)
filter_something(cars$speed, `<`)
filter_something(cars$speed, `==`)
filter_something2 = function (.data, expr) {
    .data %>%
        filter({{expr}})
}

filter_something2(cars, speed < 13)