簡體   English   中英

用 R 中的邏輯向量對邏輯向量進行子集化

[英]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.

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