如何在包中使用rlang运算符?
我正在编写一个使用tidyverse函数的包,即使用非标准求值的包,如如何在包中使用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函
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上下文中是特殊的。