R语言中|运算符行为不符合预期的问题求助
问题解析:R中|运算符的"误报"原因
核心问题出在运算符优先级上:在R里,%in%的优先级比&和|更高,所以你的代码执行顺序和预想的完全不一样。
举几个关键例子拆解:
- 最后一行代码
4|5 %in% v,实际执行顺序是先算5 %in% v,结果是FALSE,再计算4 | FALSE。R会把非零数值当作TRUE,所以4等价于TRUE,最终TRUE | FALSE的结果是TRUE,自然输出"present"。 - 再看
1&4 %in% v,实际是1 & (4 %in% v),4%in%v是FALSE,1等价于TRUE,TRUE & FALSE结果是FALSE,所以输出"not present"——这看起来符合预期,但本质也是优先级导致的执行顺序问题。
你真正想要的逻辑是先分别判断每个值是否在向量中,再做逻辑运算,所以必须给每个%in%判断加括号:
v <- c(1,2,3) # 正确的写法 if ((4 %in% v) | (5 %in% v)) {print('present')} else {print('not present')} # [1] "not present" # 其他正确示例 if ((1 %in% v) & (2 %in% v)) {print('present')} else {print('not present')} # [1] "present" if ((1 %in% v) | (4 %in% v)) {print('present')} else {print('not present')} # [1] "present"
内容的提问来源于stack exchange,提问作者bulgarianboy
相关产品推荐
相关产品推荐

