今天我遇到了一个奇怪的基础我无法找到解释。
我有一个间隔(-0.031,0.105),我想测试0(零)是否在此。很简单,但......
> 0 %in% -0.031:0.105
[1] FALSE
快速播放表明,R可以很乐意为低于-1的值执行此操作。
> 0 %in% -1.0:0.105
[1] TRUE
任何人都可以阐明为什么这不能按预期工作以及如何解决?
答案 0 :(得分:3)
%in%operator
%in%
运算符在向量中查找值,如果找到该值(至少一次),则返回TRUE
。一些例子:
0 %in% c(-1,0,1)
> TRUE # zero is in the vector
0 %in% c(-0.5,0.5)
> FALSE # zero is not in the vector
'Anna' %in% c('Anna','Bob')
> TRUE # it also works for characters
:运营商
:
运算符是seq(from,to)
的缩写。 seq()
的默认值之一是默认为1的步骤。因此,这将是您的代码输出:
-0.031:0.105
> [1] -0.031 # (to is less than 1 higher than from)
-1.0:0.105
> [1] -1 0 # (here he can actually add a second number which is the 0)
正如您所看到的,这并不是您想要实现的行为。但是有一个功能可以做到这一点:
介于功能
Bot dplyr和data.table提供了创建此行为的函数:
dplyr::between(value, lower, upper)
或data.table::between(value, lower, upper)
。 data.table %between%
运算符基于data.table::between()
函数。因此,在您的情况下,您可以这样做:
between(0,-0.031,0.105)
> TRUE
将正确返回TRUE
。