R语言使用which函数结合逻辑向量返回integer(0)的问题
问题原因
你对R中which()函数的传参规则存在误用,同时which()本身确实仅返回条件判断结果为TRUE的元素索引,两个原因共同导致了你遇到的问题。
1. 传参错误是核心原因
which()的标准语法为:
which(x, arr.ind = FALSE, useNames = TRUE)
其中第一个参数x是要检查的条件逻辑向量,后续参数分别用于控制矩阵/数组类对象是否返回行列索引、是否保留变量名,不存在你用到的「第一个参数传要匹配的逻辑值、第二个参数传待查询向量」的用法。
你之前调用which(TRUE, logical_vec)得到结果1完全是巧合:此时which()仅读取了第一个参数TRUE(长度为1的逻辑真值),直接返回该真值对应的位置1,你传入的第二个参数logical_vec完全没有参与运算,你可以自行验证which(TRUE, c(FALSE, FALSE, FALSE))仍然会返回1,和第二个参数无关。
当你调用which(FALSE, logical_vec)时,第一个参数本身是长度为1的逻辑假值,which()没有找到符合条件的位置,自然返回空的整数向量integer(0)。
2. 正确用法
如果要基于逻辑向量获取对应值的索引,直接把逻辑向量(或其取反结果)作为which()的唯一核心参数即可:
logical_vec <- c(TRUE, FALSE) # 获取TRUE元素的索引 which(logical_vec) #> [1] 1 # 获取FALSE元素的索引 which(!logical_vec) #> [1] 2
内容的提问来源于stack exchange,提问作者bioinformatics2020
相关产品推荐
相关产品推荐

