簡體   English   中英

`%in%` 和 `==` 有什么區別?

[英]What is the difference between `%in%` and `==`?

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%==有什么區別?

問題是矢量回收。

您的第一行完全符合您的期望。 它檢查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 匹配,反之亦然。

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}

這是一個舊線程,但我沒有在任何地方看到這個答案,它可能與某些人相關。

兩者之間的另一個區別是對 NA(缺失值)的處理。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM