子集
缺少值:
由於 NA
索引,在使用 [
進行子集化時使用的缺失值(NA
s)返回 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
。