R中扩展%==%运算符在data.table与运算结合时失效问题
自定义
%==%运算符在data.table中异常的原因与解决办法 问题原因
异常并非data.table本身的问题,而是R的运算符优先级规则导致的:
- R中,以
%开头和结尾的自定义运算符(如%==%)优先级高于算术运算符(如+)。 - 表达式
a+a2 %==% b会被R解析为a + (a2 %==% b),而非预期的(a+a2) %==% b。 - 错误的运算顺序会先计算
a2 %==% b得到逻辑向量,逻辑值在算术运算中自动转为数值(TRUE→1,FALSE→0),再与a相加,最终得到异常的数值结果,而非预期的逻辑比较结果。
解决方法
最直接且安全的解决方式是给算术表达式添加括号,明确运算顺序:
dt_a[, (a+a2) %==% b]
这样R会先计算括号内的a+a2得到合并后的向量,再传入%==%运算符与b做比较,即可得到正确的逻辑结果。
不建议修改运算符优先级(会破坏代码可读性与兼容性),加括号是最稳妥的方案。
内容的提问来源于stack exchange,提问作者WCMC
相关产品推荐
相关产品推荐

