R:表功能出奇的慢

时间:2018-07-24 16:10:24

标签: r

> 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中是否应该有一个更简单,更快的解决方案?

无论其价值如何,基本R函数cumsum都非常快,即使对于这个长向量也是如此:

> ptm  <-  proc.time() ; cs   <-  cumsum(v) ; show(proc.time() - ptm)
   user  system elapsed 
  0.097   0.117   0.214 

1 个答案:

答案 0 :(得分:3)

因为它首先调用factor。如果您所有的输入都是整数,请尝试tabulate。但是您需要加1,以便矢量值从1开始而不是0。