[英]Vector Indexing using Logical vector
我是 R 新手。我創建了一個對象 a: a <- c(2,4,6,8,10,12,14,16,18,20)
我對向量執行了以下操作: a[!c(10,0,8,6,0)]
並且我得到的輸出為 4 10 14 20
我明白!c(10,0,8,6,0)
產生的輸出為 FALSE TRUE FALSE FALSE TRUE
我不明白最終結果是 4 10 14 20
有人可以幫忙嗎?
我們得到結果是因為邏輯向量被回收(因為它的長度僅為 5,而length(a)
為 10)以滿足“a”向量的結尾,即
i1 <- rep(!c(10,0,8,6,0), length.out = length(a))
i1
[1] FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE
如果我們使用那個向量
a[i1]
[1] 4 10 14 20
更容易理解,如果我們只是傳遞TRUE
,然后 TRUE 被回收以返回所有元素或與FALSE
相反
a[TRUE]
[1] 2 4 6 8 10 12 14 16 18 20
a[FALSE]
numeric(0)
回收在?Extract
的文檔中提到
對於 [-indexing only: i, j, ... 可以是邏輯向量,指示要選擇的元素/切片。 如有必要,這些向量會被回收以匹配相應的范圍。 i, j, ... 也可以是負整數,表示元素/切片不在選擇范圍內。
在大多數語言中,0 被視為 FALSE,其他值被視為 TRUE。 所以,當我們否定 0 (FALSE) 被轉換為 TRUE 而所有其他的都被轉換為 FALSE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.