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

R中is.na()取反后结合which()返回结果不一致问题咨询

问题原因

这不是R的bug,是运算符优先级导致的执行顺序不符合你的预期:R中管道符%>%的优先级高于逻辑非运算符!,所以你写的代码实际执行顺序和你设想的完全不同。

实际执行逻辑拆解

你写的代码:

!(is.na(c(NA, 4, 56, NA))) %>% which()

并不会先计算!(is.na(...))再传入which(),而是按如下顺序执行:

  1. 先执行管道关联的调用:is.na(c(NA, 4, 56, NA)) %>% which(),得到结果c(1,4)
  2. 再对上述结果执行逻辑非运算:!c(1,4)
  3. R中所有非0数值转换为逻辑值都是TRUE,因此!c(1,4)的结果就是c(FALSE, FALSE),和你看到的输出完全一致。

正确写法

只需要给需要优先执行的逻辑非部分套上括号,强制优先级即可:

(!is.na(c(NA, 4, 56, NA))) %>% which()

执行后会返回正确的非NA值下标2 3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:30:01