[英]R %in% doesn't work for values greater than -0.999
今天我遇到了一個奇怪的地方,我找不到解釋。
我有一個間隔(-0.031,0.105),我想測試一下其中是否為0(零)。 很簡單,但是...
> 0 %in% -0.031:0.105
[1] FALSE
快速播放表明,對於小於-1的值,R可以很高興地做到這一點。
> 0 %in% -1.0:0.105
[1] TRUE
任何人都可以闡明為什么這不能按預期方式工作以及如何解決嗎?
%in%運算符
%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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.