[英]Subsetting a logical vector with a logical vector in R
(注意:根據評論中的建議,我已將原標題“比較 R 中兩個向量的內容?”更改為“用 R 中的邏輯向量對邏輯向量進行子集”)
我試圖理解以下 R 代碼片段(順便說一句,這個問題是在我試圖理解這個例子時產生的。)
我有一個向量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
由代表 package (v0.3.0) 於 2021 年 3 月 23 日創建
[]
用於對向量進行子集化。 您可以使用 integer 索引或邏輯值對向量進行子集化。
當您使用邏輯向量對向量進行子集化時,如果向量中的某個值為 TRUE,則該值將被選中。 在您的示例中,您正在使用可能令人困惑的邏輯向量對邏輯向量進行子集化。 讓我們再舉一個例子:
a <- c(10, 20)
b <- c(TRUE, FALSE)
a[b]
#[1] 10
由於第一個值為TRUE
而第二個值為FALSE
,因此選擇了第一個值。
現在,如果我們反轉這些值,將選擇 20,因為!b
返回FALSE TRUE
。
a[!b]
#[1] 20
現在在您的示例中實現相同的邏輯 -
a = c(FALSE, FALSE)
b <- a
!b
返回TRUE TRUE
,因此在執行b[!a]
時會選擇兩個值,而在執行 b[a b[a]
時不會選擇任何值。
b[!a]
將導致顯示那些 b 的值,這些值在 TRUE 位置,由!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
第三個元素
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.