gpt4 book ai didi

r - 带有 'by' 参数的 data.table 的奇怪行为?

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

我只想要一个函数对 data.table 中的行求和,使用 by 参数覆盖旧值。通常我希望在所有行中得到与 by 相同的结果。我创建了 2 个示例。第一个与第二个的唯一区别是删除了 data.table 的 take 列中的前 3 位数字。第一个示例按预期工作,第二个示例显示了一些意外行为。我很乐意得到任何关于我做错了什么的暗示。

R版本:4.0.4

数据表版本:1.14.2

library(data.table)

# my expected function
superpose <- function(DT){
DT <- copy(DT)
DT[, value := sum(value), by = take]
}

v1a = c( 55: 59, 33: 37, 54: 56, 32: 34, 58: 60, 36: 38)
v1b = c(25555:25559, 20533:20537, 25554:25556, 20532:20534, 25558:25560, 20536:20538)
all.equal(as.integer(factor(v1a)), as.integer(factor(v1b)))
# [1] TRUE

v2 = 1:22

data1 <- data.table(take = v1a, value = v2) # 1st data - expected behavior
data2 <- data.table(take = v1b, value = v2) # 2nd data - unexpected behavior

res1 <- superpose(data1)
res2 <- superpose(data2)

cbind(res1, res2)
which(res1[, value] != res2[, value])
# [1] 8 11 15 16 19 20 21 22

最佳答案

已经有一个 open issue在 github 上与 data.table 1.14.3 中的这个错误有关。这个问题现在已经在最新的开发版本中得到修复,可以使用以下方式安装:

update.dev.pkg()

这是一个警示故事,说明为什么只有内心勇敢的人才应该使用开发代码 - 如果您这样做,预计会出现问题。

关于r - 带有 'by' 参数的 data.table 的奇怪行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71739045/

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