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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:48:01