gpt4 book ai didi

r - 快速连接data.table(潜在bug,上报前检查)

转载 作者:行者123 更新时间:2023-12-03 23:35:27 26 4
gpt4 key购买 nike

这可能是一个错误。在这种情况下,我将删除此问题并报告为错误。我希望有人看一下以确保我没有做错什么,这样我就不会浪费开发人员的时间。

test = data.table(mo=1:100, b=100:1, key=c("mo", "b"))
mo = 1
test[J(mo)]

这将返回整个 test data.table 而不是返回的正确结果
test[J(1)]

我相信错误可能来自 test与正在连接的表具有相同的列名, mo .有没有其他人遇到同样的问题?

最佳答案

这是一个范围界定问题,类似于 data.table-faq 2.13 (warning, pdf) 中讨论的问题。 .因为 test包含名为 mo 的列, 当 J(mo)被求值,它返回整列,而不是 mo 的值在全局环境中发现,它掩盖了。 (当然,当您想做类似 test[mo<4] 之类的事情时,这种范围界定行为非常好!)

试试这个,看看发生了什么:

test <- data.table(mo=1:5, b=5:1, key=c("mo", "b"))
mo <- 1
test[browser()]
Browse[1]> J(mo)
# mo
# 1: 1
# 2: 2
# 3: 3
# 4: 4
# 5: 5
# Browse[1]>

正如链接的常见问题解答中所建议的,一个简单的解决方案是重命名索引变量:
MO <- 1
test[J(MO)]
# mo b
# 1: 1 6

(这也将起作用,原因在 i 中的 ?data.table 文档中讨论过):
mo <- data.table(1)
test[mo]
# mo b
# 1: 1 6

关于r - 快速连接data.table(潜在bug,上报前检查),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14219158/

26 4 0