子集

缺少值:

由于 NA 索引,在使用 [ 进行子集化时使用的缺失值(NAs)返回 NA

选择一个未知元素,因此返回相应元素中的 NA ..

NA默认类型是逻辑typeof(NA)),这意味着,因为子集化中使用的任何逻辑向量将被再循环以匹配子集化对象的长度。所以 x[NA] 相当于 x[as.logical(NA)],相当于 x[rep_len(as.logical(NA), length(x))],因此,它为 x 的每个元素返回一个缺失值(NA)。举个例子:

x <- 1:3
x[NA]
## [1] NA NA NA

使用 numeric/integer 进行索引时 NA 选择一个 NA 元素(对于索引中的每个 NA):

x[as.integer(NA)]
## [1] NA

x[c(NA, 1, NA, NA)]
## [1] NA  1 NA NA

子集越界:

通过一个参数的 [ 运算符允许使用 > length(x) 的索引并返回原始向量的 NA 或通用向量的 NULL。相反,使用 [[ 并且当 [ 传递更多参数时(即使用 length(dim(x)) > 2 对边界对象进行子集化),将返回错误:

(1:3)[10]
## [1] NA
(1:3)[[10]]
## Error in (1:3)[[10]] : subscript out of bounds
as.matrix(1:3)[10]
## [1] NA
as.matrix(1:3)[, 10]
## Error in as.matrix(1:3)[, 10] : subscript out of bounds
list(1, 2, 3)[10]
## [[1]]
## NULL
list(1, 2, 3)[[10]]
## Error in list(1, 2, 3)[[10]] : subscript out of bounds

当使用 character 向量进行子集化时,行为也是相同的,这些向量在对象的 names 属性中也不匹配:

c(a = 1, b = 2)["c"]
## <NA> 
##   NA 
list(a = 1, b = 2)["c"]
## <NA>
## NULL

帮助主题:

有关详细信息,请参见 ?Extract