length(v) 80373285 # 80 million v 的条目是 整数 均匀分布在 0 到 100 之间。 > ptm tv s-6ren">
gpt4 book ai didi

R:表功能出奇地慢

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

> class(v)
"numeric"
> length(v)
80373285 # 80 million
v 的条目是 整数 均匀分布在 0 到 100 之间。
> ptm  <-  proc.time()
> tv <- table(v)
> show(proc.time() - ptm)
user system elapsed
96.902 0.807 97.761

为什么是 table在这个向量上运行这么慢?

这个简单的操作有没有更快的功能?

相比之下, bigtable函数来自 bigtabulate很快:
> library(bigtabulate)
> ptm <- proc.time() ; bt <- bigtable(x = matrix(v,ncol=1), ccols=1) ; show(proc.time() - ptm)
user system elapsed
4.163 0.120 4.286

虽然 bigtabulate是一个很好的解决方案,为了这个简单的功能而求助于一个特殊的包似乎很笨拙。从技术上讲,存在开销,因为我将向量扭曲成矩阵以使其与 bigtable 一起使用.基础 R 中不应该有更简单、更快的解决方案吗? ?

无论其值(value)如何,基础 R功能 cumsum即使对于这个长向量也非常快:
> ptm  <-  proc.time() ; cs   <-  cumsum(v) ; show(proc.time() - ptm)
user system elapsed
0.097 0.117 0.214

最佳答案

因为它叫 factor第一的。试试 tabulate如果您的所有条目都是整数。但是您需要加 1,以便向量值从 1 开始而不是 0。

关于R:表功能出奇地慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51503226/

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