如何在包中使用rlang运算符?

如何在包中使用rlang运算符?,r,tidyverse,r-package,rlang,non-standard-evaluation,R,Tidyverse,R Package,Rlang,Non Standard Evaluation,我正在编写一个使用tidyverse函数的包,即使用非标准求值的包,如dplyr::filter,例如: setMethod(“按id筛选”, 签名(x=“研究”,id=“字符”), 定义=函数(x,id){ 研究id根据哈德利的说法,!!操作符更像一个实际的操作符,这就是为什么您不需要导入它 到目前为止,我们的行为就像!!和!!!是常规前缀运算符,如+、-、和!。 它们不是。从R的角度来看,!!和!!!只是重复应用了!: !!正确 #>[1]是的 !!!真的 #>[1]错误 一旦rlang函

我正在编写一个使用tidyverse函数的包,即使用非标准求值的包,如
dplyr::filter
,例如:

setMethod(“按id筛选”,
签名(x=“研究”,id=“字符”),
定义=函数(x,id){

研究id根据哈德利的说法,
!!
操作符更像一个实际的操作符,这就是为什么您不需要导入它

到目前为止,我们的行为就像!!和!!!是常规前缀运算符,如+、-、和!。 它们不是。从R的角度来看,!!和!!!只是重复应用了!:

!!正确
#>[1]是的
!!!真的
#>[1]错误
一旦
rlang
函数检测到该“运算符”,它将以不同的方式处理它,以执行必要的整洁评估(这就是为什么该运算符仅在
rlang
上下文中有用)

!!和!!!在rlang支持的所有报价函数中都有特别的行为,在这些函数中 其行为类似于实数运算符,优先级等同于一元+和-


这就是为什么您只需要导入所需的
rlang
函数的原因,因为处理
!!
的逻辑位于
rlang
内部,而不是像
magrittr
管道那样的单独函数。

我认为如果您打算大量使用
rlang
的话,最好将
作为
u从
导入seu this
没有这个。你也可以定义你自己的
使用
例如。
使用管道
在我看来确实是一种快捷方式。那么这也适用于
{}
吗?是的,你不需要导入
{}
,因为它们只在
rlang
上下文中是特殊的。我认为这是一种更干净的处理整洁评估的方法,而不是使用
my_var@PaulWildenhain。这在rlang 0.4.0中仍然是正确的,在rlang 0.4.0中{}可以在几乎任何函数上下文中有效地使用吗?嗯,据我所知,
{}
不能在任何函数上下文中使用。我认为它们只能在包的作者实现了tidy Evaluation的情况下使用。不管怎样,您仍然不需要导入它们,它们只在tidy Evalual上下文中是特殊的。