是否有R中的单功能,用于确定如果一个值是NA,NaN,Inf,-Inf,或以其他方式不合式号码?
例如:
A <- 1:10
B <- A
Run Code Online (Sandbox Code Playgroud)
A和B都引用相同的底层向量.
在我用C语言实现某些功能之前... 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, FALSE), N, prob = c(p, 1-p), replace = TRUE)
Run Code Online (Sandbox Code Playgroud)
一些明显的方法:
tablebigtabulatesum(x & y))data.tableparallel从multicore包(或新parallel包)我已经尝试了前三个选项(请参阅我的回答),但我觉得必须有更好更好的东西.
我觉得这table很慢. bigtabulate对于一对逻辑向量来说似乎有些过分.最后,进行vanilla逻辑运算看起来像一个kludge,它看了每个向量太多次(3X?7X?),更不用说它在处理期间填充了大量额外的内存,这是一个巨大的时间浪费.
向量乘法通常是一个坏主意,但是当向量稀疏时,可能会因为存储它而获得优势,然后使用向量乘法.
随意改变N和p,如果将展示的制表功能,任何有趣的行为.:)
更新1.我的第一个答案给出了三种天真方法的时间,这是相信table速度缓慢的基础.然而,要意识到的关键是"逻辑"方法效率极低.看看它在做什么:
sum)