清單
列表可以是 [
的子集:
l1 <- list(c(1, 2, 3), 'two' = c("a", "b", "c"), list(10, 20))
l1
## [[1]]
## [1] 1 2 3
##
## $two
## [1] "a" "b" "c"
##
## [[3]]
## [[3]][[1]]
## [1] 10
##
## [[3]][[2]]
## [1] 20
l1[1]
## [[1]]
## [1] 1 2 3
l1['two']
## $two
## [1] "a" "b" "c"
l1[[2]]
## [1] "a" "b" "c"
l1[['two']]
## [1] "a" "b" "c"
注意 l1[2]
的結果仍然是一個列表,因為 [
運算子選擇列表的元素,返回一個較小的列表。[[
運算子提取列表元素,返回列表元素型別的物件。
元素可以通過數字或名稱的字串(如果存在)進行索引。通過傳遞數字或名稱字串的向量,可以使用 [
選擇多個元素。索引與 length > 1
在 [
和 [[
向量返回一個清單與指定的元素和一個遞迴子集(如果可用),分別 :
l1[c(3, 1)]
## [[1]]
## [[1]][[1]]
## [1] 10
##
## [[1]][[2]]
## [1] 20
##
##
## [[2]]
## [1] 1 2 3
相比:
l1[[c(3, 1)]]
## [1] 10
這相當於:
l1[[3]][[1]]
## [1] 10
$
運算子允許你僅按名稱選擇列表元素,但與 [
和 [[
不同,不需要引號。作為中綴運算子,$
只能使用一個名稱:
l1$two
## [1] "a" "b" "c"
此外,$
運算子預設允許部分匹配:
l1$t
## [1] "a" "b" "c"
與 [[
相比,需要指定是否允許部分匹配:
l1[["t"]]
## NULL
l1[["t", exact = FALSE]]
## [1] "a" "b" "c"
設定 options(warnPartialMatchDollar = TRUE)
,當與 $
發生部分匹配時給出警告:
l1$t
## [1] "a" "b" "c"
## Warning message:
## In l1$t : partial match of 't' to 'two'