【问题标题】:data.table with extended `==` function not working in R具有扩展`==`功能的data.table在R中不起作用
【发布时间】:2022-12-20 04:33:24
【问题描述】:

这是下面的后续问题。

How to extend `==` behavior to vectors that include NAs?

在链接中,假设我们想比较

a = c(1,2,NA)
b = c(1,3,NA)

使用"%==%" <- function(a, b) (!is.na(a) & !is.na(b) & a==b) | (is.na(a) & is.na(b))的函数,得到如下结果

a %==% b
# TRUE FALSE  TRUE

我的问题是如何在data.table::data.table函数中使用%==%。为什么下面的代码不能正常工作?前两个结果还不错,但是好像%==%不能和操作一起使用,即下面的a+a2

dt_a = data.table(a = a, a2 = a+a)
dt_a[,a %==% b] 
# TRUE FALSE  TRUE
dt_a[,a2 %==% b]
# FALSE FALSE  TRUE
dt_a[,a+a2 %==% b]
# 1  2 NA # this line of result is confusing.

【问题讨论】:

    标签: r data.table na logical-operators


    【解决方案1】:

    这是运算符优先级的问题。你需要

    dt_a[,(a+a2) %==% b]
    

    假 equals 的优先级与普通的 == 不同,你最初写的等同于

    dt_a[,a+(a2 %==% b)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多