R原子向量

示例

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

# 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

的[[操作者,也可以在它接受一个的长度的索引向量和钢带任何名称本用于索引原子矢量,与差异:

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)ylength(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)