列表快速入門

通常,你作為使用者與之互動的大多數物件往往是一個向量; 例如數字向量,邏輯向量。這些物件只能採用單一型別的變數(數字向量只能在其中包含數字)。

列表可以在其中儲存任何型別變數,使其成為可以儲存我們需要的任何型別變數的通用物件。

初始化列表的示例

exampleList1 <- list('a', 'b')
exampleList2 <- list(1, 2)
exampleList3 <- list('a', 1, 2)

為了理解列表中定義的資料,我們可以使用 str 函式。

str(exampleList1)
str(exampleList2)
str(exampleList3)

列表的子集區分提取列表的切片,即獲得包含原始列表中的元素的子集的列表,以及提取單個元素。使用常用於向量的 [ 運算子會生成一個新列表。

# Returns List
exampleList3[1]
exampleList3[1:2]

要獲得單個元素,請改用 [[

# Returns Character
exampleList3[[1]]

列表條目可能被命名為:

exampleList4 <- list(
    num = 1:3,
    numeric = 0.5,
    char = c('a', 'b')
)

命名列表中的條目可以通過其名稱而不是索引來訪問。

exampleList4[['char']]

或者,$ 運算子可用於訪問命名元素。

exampleList4$num

這樣做的優點是鍵入速度更快,讀起來更容易,但重要的是要注意潛在的陷阱。$ 運算子使用部分匹配來標識匹配列表元素,並可能產生意外結果。

exampleList5 <- exampleList4[2:3]

exampleList4$num
# c(1, 2, 3)

exampleList5$num
# 0.5

exampleList5[['num']]
# NULL

列表可能特別有用,因為它們可以儲存不同長度和各種類別的物件。

## Numeric vector
exampleVector1 <- c(12, 13, 14)
## Character vector
exampleVector2 <- c("a", "b", "c", "d", "e", "f")
## Matrix
exampleMatrix1 <- matrix(rnorm(4), ncol = 2, nrow = 2)
## List
exampleList3 <- list('a', 1, 2)

exampleList6 <- list(
    num = exampleVector1, 
    char = exampleVector2,
    mat = exampleMatrix1, 
    list = exampleList3
)
exampleList6
#$num
#[1] 12 13 14
#
#$char
#[1] "a" "b" "c" "d" "e" "f"
#
#$mat
#          [,1]        [,2]
#[1,] 0.5013050 -1.88801542
#[2,] 0.4295266  0.09751379
#
#$list
#$list[[1]]
#[1] "a"
#
#$list[[2]]
#[1] 1
#
#$list[[3]]
#[1] 2