表现 – 在R中交叉列出两个大量逻辑向量的最快方式
对于两个逻辑向量,x和y的长度> 1E8,计算2×2交叉表的最快方法是什么?
我怀疑答案是写在C/C++中,但是我想知道R中是否有一些已经非常聪明的问题,因为这并不罕见. 示例代码,对于300M条目(如果3E8太大,请随意让N = 1E8;我选择的总大小只有2.5GB(2.4GB),我的目标是0.02的密度,只是为了使它更有趣使用稀疏向量,如果这有帮助,但类型转换可能需要时间). set.seed(0) N = 3E8 p = 0.02 x = sample(c(TRUE,FALSE),N,prob = c(p,1-p),replace = TRUE) y = sample(c(TRUE,replace = TRUE) 一些明显的方法: >表 我已经采取了前三个选项(见我的答案),但我觉得必须有更好更快的东西. 我发现表格工作非常缓慢. bigtabulate似乎像一个逻辑向量的过度杀戮.最后,做香草逻辑操作看起来像一个kludge,它看起来每个向量太多次(3X?7X?),更不用说在处理过程中填充了大量的内存,这是一个巨大的时间浪费. 矢量乘法通常是一个坏主意,但是当矢量稀疏时,可以从存储它中获得优点,然后使用矢量乘法. 随意变化N和p,如果这将演示任何有趣的行为的列表功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |