原子載體
原子向量(不包括列表和表示式,也是向量)是使用 [
運算子的子集:
# create an example vector
v1 <- c("a", "b", "c", "d")
# select the third element
v1[3]
## [1] "c"
[
運算子也可以將向量作為引數。例如,要選擇第一個和第三個元素:
v1 <- c("a", "b", "c", "d")
v1[c(1, 3)]
## [1] "a" "c"
有時我們可能需要從向量中省略特定值。這可以使用該值的索引之前的負號(-
)來實現。例如,要省略從 v1 中省略第一個值,請使用 v1[-1]
。這可以直接擴充套件到多個值。例如,v1[-c(1,3)]
。
> v1[-1]
[1] "b" "c" "d"
> v1[-c(1,3)]
[1] "b" "d"
在某些情況下,我們想知道,特別是當向量的長度很大時,特定值的索引(如果存在):
> v1=="c"
[1] FALSE FALSE TRUE FALSE
> which(v1=="c")
[1] 3
如果原子向量具有名稱(names
屬性),則它可以是使用名稱字元向量的子集:
v <- 1:3
names(v) <- c("one", "two", "three")
v
## one two three
## 1 2 3
v["two"]
## two
## 2
[[
運算子也可用於索引原子向量,區別在於它接受長度為 1 的索引向量並刪除任何存在的名稱:
v[[c(1, 2)]]
## Error in v[[c(1, 2)]] :
## attempt to select more than one element in vectorIndex
v[["two"]]
## [1] 2
向量也可以是使用邏輯向量的子集。與使用數字和字元向量的子集相比,用於子集的邏輯向量必須等於其元素被提取的向量的長度,因此如果邏輯向量 y
用於子集 x
,即 x[y]
,如果 length(y) < length(x)
則 y
將被回收以匹配 length(x)
:
v[c(TRUE, FALSE, TRUE)]
## one three
## 1 3
v[c(FALSE, TRUE)] # recycled to 'c(FALSE, TRUE, FALSE)'
## two
## 2
v[TRUE] # recycled to 'c(TRUE, TRUE, TRUE)'
## one two three
## 1 2 3
v[FALSE] # handy to discard elements but save the vector's type and basic structure
## named integer(0)