子集

缺少值:

由於 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