我不理解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
如果有人能澄清这种行为,那就太好了。 感谢