gpt4 book ai didi

r - 为什么不是来自 data.table 列的向量上的 "by"非常慢?

转载 作者:行者123 更新时间:2023-12-04 02:26:29 26 4
gpt4 key购买 nike

test <- data.table(x=sample.int(10, 1000000, replace=TRUE))
y <- test$x
test[,.N, by=x] # fast
test[,.N, by=y] # extremely slow

为什么在第二种情况下很慢?

这样做甚至更快:
test[,y:=y]
test[,.N, by=y]
test[,y:=NULL]

看起来好像优化得很差?

最佳答案

好像忘记更新这个帖子了。

这早在 v1.8.11 的 commit #1039 中就已修复。来自 NEWS :

Fixed #5106 where DT[, .N, by=y] where y is a vector with length(y) = nrow(DT), but y is not a column in DT. Thanks to colinfang for reporting.



在 v1.8.11 提交 1187 上进行测试:
require(data.table)
test <- data.table(x=sample.int(10, 1000000, replace=TRUE))
y <- test$x

system.time(ans1 <- test[,.N, by=x])
# user system elapsed
# 0.015 0.000 0.016

system.time(ans2 <- test[,.N, by=y])
# user system elapsed
# 0.015 0.000 0.015

setnames(ans2, "y", "x")
identical(ans1, ans2) # [1] TRUE

关于r - 为什么不是来自 data.table 列的向量上的 "by"非常慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19983423/

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