gpt4 book ai didi

r - data.table 二级键的问题

转载 作者:行者123 更新时间:2023-12-04 08:54:57 25 4
gpt4 key购买 nike

这是一个可重现的示例:

myDT <- data.table(ID=c('A','B','B'), val=c('check','check','a'));
myDT[val == "check"]; # <= secondary index created on calling this
myDT[, val:=ifelse(.N>1, '2', '1'), by=ID]

myDT
# ID val
# 1: A 1
# 2: B 2
# 3: B 2

key(myDT)
# NULL
key2(myDT)
# [1] "val"

现在,我调用一个简单的命令,它给出了相当奇怪的(对我来说)结果:
myDT[val=='2', res:='yes'][];
# ID val res
# 1: A 1 NA
# 2: B 2 yes
# 3: B 2 NA

带过滤器 val=='2' ,我希望得到记录 2 和 3,但实际上我只得到了记录 3。这显然是由于辅助键,因为它的删除带来了预期的行为:
set2key(myDT, NULL)
myDT[val=='2', res:='yes'][];
# ID val res
# 1: A 1 NA
# 2: B 2 yes
# 3: B 2 yes

我想知道这是一个错误还是预期的行为。就我而言,这显然是不受欢迎的:我什至不知道二级键(在询问 that SO question 之前)这样的东西,我花了很多时间试图弄清楚为什么我错过了一些记录。对我来说,我通过添加 set2key(myDT, NULL) 解决了这个问题。指令,但现在我担心类似的事情可能会发生在我代码的其他部分,我不知道如何检测/防止它 - 我不想添加 set2key(., NULL)每隔一行调用一次...

最佳答案

这确实是一个错误(我报告了它,但结果已经报告了),并且它在包版本 1.9.7 中得到了修复 - 现在一切正常!

关于r - data.table 二级键的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34983209/

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