如何在%运算符之间创建中缀%?

ric*_*rdo 21 r

我想有一个中缀操作%between%R-检查,看是否x是下限之间l和上限u.

我创建了以下简单函数 - 但它不是中缀操作.

# between function - check to see if x is between l and u
is.between <- function(x, l, u) { x > l & x < u }
Run Code Online (Sandbox Code Playgroud)

我的目标是用以下代替: x %between% c(l, u)

是否可以定义新的中缀操作?如果是这样,那怎么做呢?

提前致谢

mri*_*rip 23

您可以将中缀运算符定义为函数:

`%between%`<-function(x,rng) x>rng[1] & x<rng[2]
1 %between% c(0,3)
# [1] TRUE
1 %between% c(2,3)
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)

正如@flodel所指出的,这个运算符是矢量化的:

1:5 %between% c(1.5,3.5)
# [1] FALSE  TRUE  TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

  • +1 - 您还应该通过显示"x"长度> 1的示例来提供矢量化函数. (4认同)
  • 在那里删除一些输入验证代码并没有什么坏处(但这是一个增强 - 这个答案不需要).然后,有通常的选择:你想要能够包括球门柱(`x <= rng [2]`),你想要或不允许"几乎相等"吗?只是指出你必须要小心你对简单操作员的期望. (2认同)

mne*_*nel 12

该函数存在于包中data.table(包含边界的细微差别),实现方式如下:

between <- function(x,lower,upper,incbounds=TRUE)
{
  if(incbounds) x>=lower & x<=upper
  else x>lower & x<upper
}

"%between%" <- function(x,y) between(x,y[1],y[2],incbounds=TRUE)
Run Code Online (Sandbox Code Playgroud)

它可以用作between(x,lower,upper)x %between% c(lower, upper)