2016-08-13 61 views
0

我看到在子集的例子下面,我不把它理解爲我仍然相當新的R.的R - 子集混亂

x <- c(1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9) 
x[c(TRUE, TRUE, FALSE, FALSE)] 
[1] 1.1 2.2 5.5 6.6 9.9 

我理解數字組成的向量的創建。但我不明白如何或爲什麼通過使用布爾值進行子集化來生成結果。

+1

回收的好解釋[here](http://stackoverflow.com/questions/13461829/r-how-to-list-every-other-element/13462110) –

回答

2

這顯然是一個回收問題。邏輯vector被循環到矢量的末尾,並在找到TRUE的任何地方返回值。爲了說明它創建邏輯矢量與rep

i1 <- rep(c(TRUE, TRUE, FALSE, FALSE), length.out=9) 
i1 
#[1] TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE 

和子集vector

x[i1] 
#[1] 1.1 2.2 5.5 6.6 9.9 

該循環的競爭也做同樣的事情,即重複邏輯元素的向量,直到它到達矢量的末端。