`%in%` 和 `==` 有啥区别?

Posted

技术标签:

【中文标题】`%in%` 和 `==` 有啥区别?【英文标题】:What is the difference between `%in%` and `==`?`%in%` 和 `==` 有什么区别? 【发布时间】:2022-01-13 21:32:49 【问题描述】:
df <- structure(list(x = 1:10, time = c(0.5, 0.5, 1, 2, 3, 0.5, 0.5, 
1, 2, 3)), .Names = c("x", "time"), row.names = c(NA, -10L), class = "data.frame")


df[df$time %in% c(0.5, 3), ]
##     x time
## 1   1  0.5
## 2   2  0.5
## 5   5  3.0
## 6   6  0.5
## 7   7  0.5
## 10 10  3.0

df[df$time == c(0.5, 3), ]
##     x time
## 1   1  0.5
## 7   7  0.5
## 10 10  3.0

%in%== 这里有什么区别?

【问题讨论】:

在 R 中查看 ?'=='?'%in%' 你可能对video number #033感兴趣 【参考方案1】:

问题在于矢量回收。

您的第一行完全符合您的预期。它检查df$time 的哪些元素在c(0.5, 3) 中并返回它们的值。

您的第二行比较棘手。它实际上相当于

df[df$time == rep(c(0.5,3), length.out=nrow(df)),]

要看到这一点,让我们看看如果使用矢量rep(0.5, 10) 会发生什么:

rep(0.5, 10) == c(0.5, 3)
[1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE

看看它是如何返回每个奇数的。本质上它匹配 0.5 到向量 c(0.5, 3, 0.5, 3, 0.5...)

您可以通过这种方式操作向量以不产生匹配项。取矢量:rep(c(3, 0.5), 5):

rep(c(3, 0.5), 5) == c(0.5, 3)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

他们都是FALSE;您将每 0.5 与 3 匹配,反之亦然。

【讨论】:

得到它总是使用%in% 除非我比较一个独特的价值或实际上打算使用回收,非常清楚谢谢 + @user1320502 实际上,即使只有一个值,使用 %in% 也有一些优势。尝试x &lt;- c(1:5, rep(NA, 3)); x[x==3] 并将其与x[x%in%3] 进行比较。【参考方案2】:

df$time == c(0.5,3)

c(0.5,3) 首先被广播成df$time 的形状,即c(0.5,3,0.5,3,0.5,3,0.5,3,0.5,3)。然后逐个元素地比较这两个向量。

另一方面,

df$time %in% c(0.5,3)

检查df$time的每个元素是否属于集合0.5, 3

【讨论】:

【参考方案3】:

这是一个旧线程,但我在任何地方都没有看到这个答案,它可能与某些人有关。

两者之间的另一个区别是处理 NA(缺失值)。

NA == NA
[1] NA
NA %in% c(NA)
[1] TRUE

【讨论】:

以上是关于`%in%` 和 `==` 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Log in 与 Sign in 有啥区别吗

数据库中IN 和EXISTS有啥区别?

Sign in, Sign up, Login in, Login on 有啥区别?

sql语句中嵌套时候用in 和=有啥区别

in verbis virtus 和原声版有啥区别

sql server 中 in 和like 有啥区别?