You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何R语言中`which`命令无法识别两个相同数值?

问题

使用R语言的which函数结合==运算符比较两个向量,想要收集两者中数值相同的元素索引,但部分看似相同的数值(例如20005612212)未被识别。

用于比较的向量:

vulnIDs <- c(20005611101, 20005611102, 20005611103, 20005611104, 20005611105, 
             20005611106, 20005611107, 20005611108, 20005611109, 20005611110, 
             20005611111, 20005611112, 20005611113, 20005611114, 20005611115, 
             20005611116, 20005611117, 20005611118, 20005611119, 20005611120, 
             20005611121, 20005611122, 20005611123, 20005611124, 20005611125, 
             20005611126, 20005611127, 20005611128, 20005611129, 20005611130, 
             20005611131, 20005611132, 20005611133, 20005611134, 20005611135, 
             20005612201, 20005612202, 20005612203, 20005612204, 20005612205, 
             20005612206, 20005612207, 20005612208, 20005612209, 20005612210, 
             20005612211, 20005612212, 20005612213, 20005612214, 20005612215, 
             20005612216, 20005612217, 20005612218, 20005612219, 20005612220, 
             20005612221, 20005612222, 20005612223, 20005612224, 20005612225, 
             20005612226, 20005612227, 20005612228, 20005612229, 20005612230, 
             20005613301, 20005613302, 20005613303, 20005613304, 20005613305)

vulns_nmp <- c(20005612206, 20005612212, 20005612218, 20005612224, 20005612230, 
               20005613301, 20005613302, 20005613303, 20005613304, 2000561330)

执行代码:

test <- which(vulnIDs == vulns_nmp)

得到输出:

> test
[1] 41 53 65 66 67 68 69

结果未包含20005612212对应的索引47,原因是什么?

问题原因

  • ==运算符在R中是逐元素比较,当两个向量长度不一致时,短向量会被自动循环拉长到和长向量相同的长度。
  • 这里vulns_nmp长度为10,vulnIDs长度为69,所以vulns_nmp会被重复循环。vulnIDs[47]对应的是循环后的vulns_nmp[47 %% 10],也就是vulns_nmp[7],其值为20005613302,和vulnIDs[47]的20005612212不相等,因此不会被which选中。
  • 额外注意:vulns_nmp最后一个元素是2000561330,而vulnIDs中对应的是20005613305,这是笔误,但不是本次问题的核心原因。

正确实现方式

如果要找出vulnIDs中所有存在于vulns_nmp里的元素的索引,应该使用%in%运算符,它会检查长向量的每个元素是否在短向量中存在,而非逐位置循环比较:

test <- which(vulnIDs %in% vulns_nmp)

执行后会得到正确的索引,包括47。

内容的提问来源于stack exchange,提问作者Omar Velazquez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:05:30