原子载体

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

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