gpt4 book ai didi

r - 为什么 data.table 行索引上的 for 循环比 data.frame 慢?

转载 作者:行者123 更新时间:2023-12-04 10:37:36 25 4
gpt4 key购买 nike

我很困惑为什么按行索引访问 data.table 比 data.frame 慢。有什么建议我可以更快地在循环中顺序访问每一行 data.table 吗?

m = matrix(1L, nrow=100000, ncol=100)

DF = as.data.frame(m)
DT = as.data.table(m)

identical(DF[100, ], DT[100, ])
[1] FALSE

> all(DF[100, ], DT[100, ])
[1] TRUE

> system.time(for (i in 1:1000) DT[i,])
user system elapsed
5.440 0.000 5.451

R> system.time(for (i in 1:1000) DF[i,])
user system elapsed
2.757 0.000 2.784

最佳答案

一个 data.table查询有更多的参数(而且它做的更多)所以 DT[...] 的开销很小大于 DF[...] .如果你循环它,这个开销就会增加。 data.table的预期用途是让它执行几次大型复杂操作,而不是多次执行小型琐碎计算。因此,让我们重新制定您的测试:

> system.time(DT[seq(len=nrow(m)),])
user system elapsed
0.08 0.02 0.09
> system.time(DF[seq(len=nrow(m)),])
user system elapsed
0.08 0.05 0.13

在这里,它们大致相同。由于我们只有一个 DT 调用,因此开销并不那么明显,因为开销只执行一次。在您的情况下,您执行了 100K 次(不必要地,我可能会添加)。如果您正在使用 data.table并且您正在调用它数千次,您可能使用错误。几乎可以肯定有一种方法可以重新制定,因此您可以只拥有一个或几个 data.table做同样事情的电话。

另外,请注意,即使我在这里重新制定的测试也非常简单,这就是 data.table 的原因。与 data.frame 的性能相当.

关于r - 为什么 data.table 行索引上的 for 循环比 data.frame 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21033196/

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