R%in%对大于-0.999的值不起作用

时间:2016-05-03 10:12:16

标签: r

今天我遇到了一个奇怪的基础我无法找到解释。

我有一个间隔(-0.031,0.105),我想测试0(零)是否在此。很简单,但......

> 0 %in% -0.031:0.105
[1] FALSE

快速播放表明,R可以很乐意为低于-1的值执行此操作。

> 0 %in% -1.0:0.105
[1] TRUE

任何人都可以阐明为什么这不能按预期工作以及如何解决?

1 个答案:

答案 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