我想在%between%
中有一个中缀运算符R
- 检查x
是否在下限l
和上限{{1}之间}。
我创建了以下简单函数 - 但它不是中缀操作。
u
我的目标是将其替换为:# between function - check to see if x is between l and u
is.between <- function(x, l, u) { x > l & x < u }
是否可以定义新的中缀操作?如果是这样,那怎么做呢?
提前致谢
答案 0 :(得分: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
正如@flodel所指出的,这个运算符是矢量化的:
1:5 %between% c(1.5,3.5)
# [1] FALSE TRUE TRUE FALSE FALSE
答案 1 :(得分: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)
可以用作between(x,lower,upper)
或x %between% c(lower, upper)
答案 2 :(得分:3)
为避免歧义,可以定义两个函数:
"%><%" <- function(x, rng) x > rng[1] & x < rng[2]
"%>=<%" <- function(x, rng) x >= rng[1] & x <= rng[2]
x=1:5
x %><% c(2,4)
[1] FALSE FALSE TRUE FALSE FALSE
x %>=<% c(2,4)
[1] FALSE TRUE TRUE TRUE FALSE
甚至可以添加其他两个:
"%> =<%"<-function(x,rng) x > rng[1] & x <= rng[2]
"%>= <%"<-function(x,rng) x >= rng[1] & x < rng[2]