R 中的身份和向量:MyData1 == c("a", "b") 如何工作(或不工作)

Identity and vectors in R: how does MyData1 == c("a", "b") work (or not)

我写错了 MyData1 %in% c("a", "b")

...我写了MyData1 == c("a", "b")

...但我想知道这是如何以及为什么不起作用。为什么会出现以下情况?

> MyData1 <- rep(c("a", "b", "b"), 4)
> MyData1
 [1] "a" "b" "b" "a" "b" "b" "a" "b" "b" "a" "b" "b"
> MyData1 == c("a", "b")
 [1]  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE

为什么第一个结果是 TRUE 而第二个结果是 FALSE?尝试:

> MyData1[1] == c("a", "b")
[1]  TRUE FALSE
> MyData1[2] == c("a", "b")
[1] FALSE  TRUE
> MyData1[1:2] == c("a", "b")
[1] TRUE TRUE

...我 none 更聪明...现在无论我测试向量的 1 个还是 2 个元素,我都能得到两个项目!

这是因为矢量回收。 == 进行逐元素比较,而 %in% 检查整个向量中的值,该元素的位置无关紧要。

当一个 vector/value 的长度比另一个短时,R 回收该值并使它们的长度相等。

当你这样做时

MyData1 == c("a", "b")

MyData1 中的第一个值与 "a" 进行比较,MyData1 中的第二个值与 "b" 进行比较。现在,由于向量 c("a", "b") 更短,R 再次回收相同的值,因此 MyData1 的第 3 个值再次与 "a" 进行比较,第 4 个值与 "b" 进行比较,依此类推。

在下一部分中,向量回收再次发生,但这次是相反的方向。

MyData1[1] == c("a", "b")

MyData1[1] 的长度为 1,因此 MyData1[1] 的第一个值与 "a" 进行比较,现在再次重复相同的值以与 "b" 进行比较,以便您得到。

#[1]  TRUE FALSE