r - 什么算法用于设置交集?
问题描述
R 在内部使用什么算法来设置交集,即intersect(x,y)
?帮助文件中似乎没有任何信息。据我所知,它不是基于排序然后合并x
和y
,作为预排序x
并且y
不会加速它。
解决方案
的代码intersect(x, y)
是
function (x, y)
{
y <- as.vector(y)
unique(y[match(as.vector(x), y, 0L)])
}
unique
是一个通用函数,unique.default
调用内部 C 函数do_duplicated
,然后调用any_duplicated
或any_duplicated3
. match
调用内部 C 函数do_match
,该函数又调用match5
. 各自的 C 函数、any_duplicated
、any_duplicated3
和match5
使用哈希表,请参见https://svn.r-project.org/R/trunk/src/main/unique.c。
因此,intersect
使用哈希表来计算集合交集,尽管哈希表会被构造两次,一次是 for match
,一次是 for unique
。
推荐阅读
- sql - ORACLE 'INSERT ALL' WHEN UNIQUE THEN...用于 INTO 子句之一,ELSE...用于另一个
- tuckey-urlrewrite-filter - tukey urlrewrite,查询字符串,删除 www
- css - 按高度缩放字体大小,但将其限制为视口宽度
- json - Scala将多层json转换为多层map
- angular - Angular 8 获取令牌失败 {"_error":"令牌更新操作因超时而失败","_errorDesc":"令牌更新失败","_scopes":""}
- c++ - 我的 MyGraph 属性顶点名称和边权重有问题
- angular-material - 加载角度材料时在特定表格行上显示微调器
- matlab - 如何在 Code Ocean 上安装 WFDB Toolbox for MATLAB?
- flutter - Flutter Dropdown 默认值
- asp.net-web-api - WebAPI 邮递员不调用 Post