原子載體

原子向量(不包括列表和表示式,也是向量)是使用 [ 運算子的子集:

# 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)