R中的data.table 1.9.4二进制搜索零具有意外行为

时间:2014-11-19 08:24:18

标签: r data.table

我不理解data.table的二进制搜索中0和0L之间的区别。

尝试用一个小例子来解释它。

DT <- data.table(a = c(0, 1.5, 2, 1), b = c(0L:3L))
str(DT)
Classes ‘data.table’ and 'data.frame':  4 obs. of  2 variables:
 $ a: num  0 1.5 2 1
 $ b: int  0 1 2 3
 - attr(*, ".internal.selfref")=<externalptr> 
DT[a == 1.5, a := 1]
DT[a == 1]
   a b
1: 1 1
2: 1 3

此时一切都很好但是......

DT[a == 2, a := 0]
DT[a == 0]
   a b
1: 0 0
DT[a == 0L]
   a b
1: 0 0
2: 0 2
str(DT)
Classes ‘data.table’ and 'data.frame':  4 obs. of  2 variables:
 $ a: num  0 1 0 1
 $ b: int  0 1 2 3
 - attr(*, ".internal.selfref")=<externalptr> 
 - attr(*, "index")= atomic  
  ..- attr(*, "a")= int  1 4 2 3

嗯,变量a是数字但我在搜索整数时得到'正确'答案?

反之亦然:

DT[b == 2L, b := 0L]
DT[b == 0L]
   a b
1: 0 0
DT[b == 0]
   a b
1: 0 0
2: 0 0
str(DT)
Classes ‘data.table’ and 'data.frame':  4 obs. of  2 variables:
 $ a: num  0 1 0 1
 $ b: int  0 1 0 3
 - attr(*, ".internal.selfref")=<externalptr> 
 - attr(*, "index")= atomic  
  ..- attr(*, "a")= int  1 4 2 3
  ..- attr(*, "b")= int 

如果有人能澄清这种行为,那就太好了。 感谢

0 个答案:

没有答案