相关疑难解决方法(0)

检测NaN,NA,Inf,-Inf等的一个功能?

是否有R中的单功能,用于确定如果一个值是NA,NaN,Inf,-Inf,或以其他方式不合式号码?

r nan r-faq na

47
推荐指数
1
解决办法
1万
查看次数

在R中,如何检查两个变量名是否引用相同的底层对象?

例如:

A <- 1:10
B <- A
Run Code Online (Sandbox Code Playgroud)

A和B都引用相同的底层向量.

在我用C语言实现某些功能之前... R中是否有一个函数可以测试两个变量是否引用相同的底层对象?

谢谢.

r

19
推荐指数
2
解决办法
1544
查看次数

在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)

一些明显的方法:

  1. table
  2. bigtabulate
  3. 简单的逻辑运算(例如sum(x & y))
  4. 矢量乘法(嘘)
  5. data.table
  6. 上面的一些,parallelmulticore包(或新parallel包)

我已经尝试了前三个选项(请参阅我的回答),但我觉得必须有更好更好的东西.

我觉得这table很慢. bigtabulate对于一对逻辑向量来说似乎有些过分.最后,进行vanilla逻辑运算看起来像一个kludge,它看了每个向量太多次(3X?7X?),更不用说它在处理期间填充了大量额外的内存,这是一个巨大的时间浪费.

向量乘法通常是一个坏主意,但是当向量稀疏时,可能会因为存储它而获得优势,然后使用向量乘法.

随意改变Np,如果将展示的制表功能,任何有趣的行为.:)


更新1.我的第一个答案给出了三种天真方法的时间,这是相信table速度缓慢的基础.然而,要意识到的关键是"逻辑"方法效率极低.看看它在做什么:

  • 4个逻辑向量运算
  • 4种类型转换(逻辑到整数或FP - 用于sum)
  • 4矢量求和 …

statistics performance r crosstab bigdata

15
推荐指数
2
解决办法
2216
查看次数

标签 统计

r ×3

bigdata ×1

crosstab ×1

na ×1

nan ×1

performance ×1

r-faq ×1

statistics ×1