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
我写错了 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