用 R 中的逻辑向量子集逻辑向量
Subsetting a logical vector with a logical vector in R
(注意:根据评论中的建议,我将原来的标题“Comparing the content of two vectors in R?”改为“Subsetting a logical vector with a logical vector in R”)
我正在尝试理解以下 R 代码片段(顺便说一下,这个问题是在我试图理解 this example 时产生的)
我有一个矢量 a
定义为:
a = c(FALSE, FALSE)
然后我可以定义b
:
b <- a
我检查了 b
的内容,一切正常:
b
#> [1] FALSE FALSE
问题
现在,下面的代码在做什么?它是否检查 b
是否等于“不”a
?
b[!a]
#> [1] FALSE FALSE
但是如果我尝试 b[a]
结果会不同:
b[a]
#> logical(0)
我也尝试了一个不同的例子:
a = c(FALSE, TRUE)
b <- a
b
#> [1] FALSE TRUE
现在我尝试与上面相同的操作,但我得到了不同的结果:
b[!a]
#> [1] FALSE
b[a]
#> [1] TRUE
由 reprex package (v0.3.0)
于 2021-03-23 创建
[]
用于对向量进行子集化。您可以使用整数索引或逻辑值对向量进行子集化。
当您使用逻辑向量对向量进行子集化时,如果向量中的值为 TRUE,则会选择该值。在您的示例中,您正在用一个逻辑向量子集化一个逻辑向量,这可能会造成混淆。再举个例子:
a <- c(10, 20)
b <- c(TRUE, FALSE)
a[b]
#[1] 10
由于第一个值为 TRUE
,第二个值为 FALSE
,因此选择第一个值。
现在如果我们反转值,将选择 20,因为 !b
returns FALSE TRUE
.
a[!b]
#[1] 20
现在在您的示例中实现相同的逻辑 -
a = c(FALSE, FALSE)
b <- a
!b
returns TRUE TRUE
,因此当您执行 b[!a]
时会选择两个值,而当您执行时会选择值的 none b[a]
.
b[!a]
将导致显示那些 b 的值,这些值在 !a
.
评估的 TRUE 位置
!a
实际上是 T,因此 T 显示 b 的第一个和第二个值,即 F 和 F
更高效请看这里
a <- 1:4
b <- c(T, T, F, T)
现在 a[!b]
将显示 a[c(F, F, T, F)]
即 a
的第三个元素
(注意:根据评论中的建议,我将原来的标题“Comparing the content of two vectors in R?”改为“Subsetting a logical vector with a logical vector in R”)
我正在尝试理解以下 R 代码片段(顺便说一下,这个问题是在我试图理解 this example 时产生的)
我有一个矢量 a
定义为:
a = c(FALSE, FALSE)
然后我可以定义b
:
b <- a
我检查了 b
的内容,一切正常:
b
#> [1] FALSE FALSE
问题
现在,下面的代码在做什么?它是否检查 b
是否等于“不”a
?
b[!a]
#> [1] FALSE FALSE
但是如果我尝试 b[a]
结果会不同:
b[a]
#> logical(0)
我也尝试了一个不同的例子:
a = c(FALSE, TRUE)
b <- a
b
#> [1] FALSE TRUE
现在我尝试与上面相同的操作,但我得到了不同的结果:
b[!a]
#> [1] FALSE
b[a]
#> [1] TRUE
由 reprex package (v0.3.0)
于 2021-03-23 创建[]
用于对向量进行子集化。您可以使用整数索引或逻辑值对向量进行子集化。
当您使用逻辑向量对向量进行子集化时,如果向量中的值为 TRUE,则会选择该值。在您的示例中,您正在用一个逻辑向量子集化一个逻辑向量,这可能会造成混淆。再举个例子:
a <- c(10, 20)
b <- c(TRUE, FALSE)
a[b]
#[1] 10
由于第一个值为 TRUE
,第二个值为 FALSE
,因此选择第一个值。
现在如果我们反转值,将选择 20,因为 !b
returns FALSE TRUE
.
a[!b]
#[1] 20
现在在您的示例中实现相同的逻辑 -
a = c(FALSE, FALSE)
b <- a
!b
returns TRUE TRUE
,因此当您执行 b[!a]
时会选择两个值,而当您执行时会选择值的 none b[a]
.
b[!a]
将导致显示那些 b 的值,这些值在 !a
.
!a
实际上是 T,因此 T 显示 b 的第一个和第二个值,即 F 和 F
更高效请看这里
a <- 1:4
b <- c(T, T, F, T)
现在 a[!b]
将显示 a[c(F, F, T, F)]
即 a