列表是 R 語言的對象集合,可以用來保存不同類型的數(shù)據(jù),可以是數(shù)字、字符串、向量、另一個(gè)列表等,當(dāng)然還可以包含矩陣和函數(shù)。
R 語言創(chuàng)建列表使用 list() 函數(shù)。
如下示例,我們創(chuàng)建一個(gè)列表,包含了字符串、向量和數(shù)字:
list_data <- list("nhooo", "google", c(11,22,33), 123, 51.23, 119.1) print(list_data)
執(zhí)行以上代碼輸出結(jié)果為:
[[1]] [1] "nhooo" [[2]] [1] "google" [[3]] [1] 11 22 33 [[4]] [1] 123 [[5]] [1] 51.23
我們可以使用 names() 函數(shù)給列表的元素命名:
# 列表包含向量、矩陣、列表 list_data <- list(c("Google","Nhooo","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2), list("nhooo",12.3)) # 給列表元素設(shè)置名字 names(list_data) <- c("Sites", "Numbers", "Lists") # 顯示列表 print(list_data)
執(zhí)行以上代碼輸出結(jié)果為:
$Sites [1] "Google" "Nhooo" "Taobao" $Numbers [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 $Lists $Lists[[1]] [1] "nhooo" $Lists[[2]] [1] 12.3
列表中的元素可以使用索引來訪問,如果使用來 names() 函數(shù)命名后,我們還可以使用對應(yīng)名字來訪問:
# 列表包含向量、矩陣、列表 list_data <- list(c("Google","Nhooo","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2), list("nhooo",12.3)) # 給列表元素設(shè)置名字 names(list_data) <- c("Sites", "Numbers", "Lists") # 顯示列表 print(list_data[1]) # 訪問列表的第三個(gè)元素 print(list_data[3]) # 訪問第一個(gè)向量元素 print(list_data$Numbers)
執(zhí)行以上代碼輸出結(jié)果為:
$Sites [1] "Google" "Nhooo" "Taobao" $Lists $Lists[[1]] [1] "nhooo" $Lists[[2]] [1] 12.3 [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6
我們可以對列表進(jìn)行添加、刪除、更新的操作,如下示例:
# 列表包含向量、矩陣、列表 list_data <- list(c("Google","Nhooo","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2), list("nhooo",12.3)) # 給列表元素設(shè)置名字 names(list_data) <- c("Sites", "Numbers", "Lists") # 添加元素 list_data[4] <- "新元素" print(list_data[4]) # 刪除元素 list_data[4] <- NULL # 刪除后輸出為 NULL print(list_data[4]) # 更新元素 list_data[3] <- "我替換來第三個(gè)元素" print(list_data[3])
執(zhí)行以上代碼輸出結(jié)果為:
[[1]] [1] "新元素" $<NA> NULL $Lists [1] "我替換來第三個(gè)元素"
我們可以使用 c() 函數(shù)將多個(gè)列表合并為一個(gè)列表:
# 創(chuàng)建兩個(gè)列表 list1 <- list(1,2,3) list2 <- list("Google","Nhooo","Taobao") # 合并列表 merged.list <- c(list1,list2) # 顯示合并后的列表 print(merged.list)
執(zhí)行以上代碼輸出結(jié)果為:
[[1]] [1] 1 [[2]] [1] 2 [[3]] [1] 3 [[4]] [1] "Google" [[5]] [1] "Nhooo" [[6]] [1] "Taobao"
要將列表轉(zhuǎn)換為向量可以使用 unlist() 函數(shù),將列表轉(zhuǎn)換為向量,可以方便我們進(jìn)行算術(shù)運(yùn)算:
# 創(chuàng)建列表 list1 <- list(1:5) print(list1) list2 <-list(10:14) print(list2) # 轉(zhuǎn)換為向量 v1 <- unlist(list1) v2 <- unlist(list2) print(v1) print(v2) # 兩個(gè)向量相加 result <- v1+v2 print(result)
執(zhí)行以上代碼輸出結(jié)果為:
[[1]] [1] 1 2 3 4 5 [[1]] [1] 10 11 12 13 14 [1] 1 2 3 4 5 [1] 10 11 12 13 14 [1] 11 13 15 17 19