gpt4 book ai didi

r - 运算符 == 在 data.table 中的逻辑列中不一致

转载 作者:行者123 更新时间:2023-12-03 23:54:55 25 4
gpt4 key购买 nike

请参阅以下可重现的示例:

library(data.table)
set.seed(123)
DT <- data.table(A=rep(0.3,10000))
DT[, B := runif(.N) < A]
DT[B == T, .N]
# [1] 3005
DT[, summary(B)]
# Mode FALSE TRUE NA's
# logical 6995 3005 0

一切看起来都很好,两种方法的“TRUE”值计数相同。现在用一个新的替换 col B。
DT[, B := runif(.N) < A]
DT[B == T, .N]
# [1] 3331
DT[, summary(B)]
# Mode FALSE TRUE NA's
# logical 6981 3019 0

B列中'T'的计数不同!!!它是同一列,但一种方法给出 3331 个“TRUE”值,另一种方法给出 3019 个。

当 == 被绕过时
DT[B != F, .N]
# [1] 3019
DT[, summary(B)]
# Mode FALSE TRUE NA's
# logical 6981 3019 0

这又是正确的

我可以在 Windows 8.1 x64 上使用 data.table v1.94 和 1.9.5 重现它。

这是一个更容易重现的示例,没有 runif() .
require(data.table) ## 1.9.4+
DT = data.table(x = 1:5)
DT[, y := x <= 2L]
# x y
# 1: 1 TRUE
# 2: 2 TRUE
# 3: 3 FALSE
# 4: 4 FALSE
# 5: 5 FALSE

DT[y == TRUE, .N]
# [1] 2 <~~~~~~ correct result.

DT[, y := x <= 3L]
# x y
# 1: 1 TRUE
# 2: 2 TRUE
# 3: 3 TRUE
# 4: 4 FALSE
# 5: 5 FALSE

DT[y == TRUE, .N]
# [1] 2 <~~~~~~ incorrect result, should be 3!

最佳答案

现在固定在 v1.9.5在 GitHub 上。

:= and set* now drop secondary keys (new in v1.9.4) so that DT[x==y] works again after a := or set* without needing options(datatable.auto.index=FALSE). Only setkey() was dropping secondary keys correctly. 23 tests added. Thanks to user36312 for reporting, #885.

关于r - 运算符 == 在 data.table 中的逻辑列中不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26308072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com