R编程中的二维列表
R 中的列表基本上是一个 R 对象,其中包含属于不同数据类型的元素,可能是数字字符串甚至其他列表。基本上,一个列表可以包含其他可能具有不同长度的对象。该列表是使用 R 中的 list()函数定义的。
二维列表可以被认为是“列表的列表”。二维列表可以被认为是一个矩阵,其中每一行可以有不同的长度并支持不同的数据类型。
创建二维列表
一维列表可以首先使用list()
函数创建。它们可以进一步包含在另一个外部列表中。外部列表的长度是它包含的内部列表的数量,由length()
函数访问。各种内部列表的长度可以通过使用 length (list[[index]])函数通过索引来计算,其中相应的索引由 [[ ]] 访问。
# list1 and list2 are uni-dimensional lists
list1 <- list (c(1:5), "hi", 0 + 5i)
list2 <- list(c(6:8))
# create a list_data with two lists as its elements
list_data <- list(list1, list2)
print ("The two-dimensional list is : ")
print (list_data)
cat("Length of nested list is : ",
length (list_data))
cat("Length of first inner list is : ",
length (list_data[[1]]))
输出:
[1] "The two-dimensional list is : "
[[1]]
[[1]][[1]]
[1] 1 2 3 4 5
[[1]][[2]]
[1] "hi"
[[1]][[3]]
[1] 0+5i
[[2]]
[[2]][[1]]
[1] 6 7 8
Length of nested list is : 2
Length of first inner list is : 3
第一个列表包含三个不同大小和数据类型的元素、一个数字序列 1 到 5、一个字符串和一个复数。第二个列表包含一个长度为 3 的向量,由数字 6 到 8 组成。
访问嵌套列表
列表的所有元素都可以通过嵌套的 for 循环访问。外部循环一直运行到外部列表的元素数量。内部循环由内部列表的各个长度组成。
以下 R 代码表示使用二维列表:
# list1 and list2 are uni-dimensional lists
list1 <- list (c(1:5), "hi", 0 + 5i)
list2 <- list(c(6:8))
# create a list_data with two lists as its elements
list_data <- list(list1, list2)
# runs uptil the length of outer list
for (i in c(1 : length(list_data)))
{
# runs uptil the length of inner lists at ith indices
for (j in c(1: length(list_data[[i]])))
{
cat ("List", i, "element", j, ": ")
print (list_data[[i]][[j]])
}
}
输出:
List 1 element 1 : [1] 1 2 3 4 5
List 1 element 2 : [1] "hi"
List 1 element 3 : [1] 0+5i
List 2 element 1 : [1] 6 7 8
删除或更新元素
内部列表可以通过单级索引进行修改。对应的内部列表元素设置为新值。如果新值等于 NULL,则删除该元素,否则进行修改。
内部列表的元素可以通过双级索引删除或修改。要修改的元素设置为新值。如果值为 NULL,则删除相应的元素。否则,修改。
修改列表
以下 R 代码用于修改列表:
# list1 and list2 are uni-dimensional lists
list1 <- list (c(1:5), "hi", 0 + 5i)
list2 <- list(c(6:8))
# create a list_data with two lists as its elements
list_data <- list(list1, list2)
print ("The original list is : ")
print (list_data)
# modifying third component of first list
list_data[[1]][[3]] = "you"
print ("Modification 1")
print (list_data)
# modifying second inner list
list_data[[2]] <- list (c(0:3))
print ("Modification 2")
print (list_data)
输出:
[1] "The original list is : "
[[1]]
[[1]][[1]]
[1] 1 2 3 4 5
[[1]][[2]]
[1] "hi"
[[1]][[3]]
[1] 0+5i
[[2]]
[[2]][[1]]
[1] 6 7 8
[1] "Modification 1"
[[1]]
[[1]][[1]]
[1] 1 2 3 4 5
[[1]][[2]]
[1] "hi"
[[1]][[3]]
[1] “you”
[[2]]
[[2]][[1]]
[1] 6 7 8
[1] "Modification 2"
[[1]]
[[1]][[1]]
[1] 1 2 3 4 5
[[1]][[2]]
[1] "hi"
[[1]][[3]]
[1] "you"
[[2]]
[[2]][[1]]
[1] 0 1 2 3
删除列表
以下 R 代码用于删除列表:
# list1 and list2 are uni-dimensional lists
list1 <- list (c(1:5), "hi", 0 + 5i)
list2 <- list(c(6:8))
# create a list_data with two lists as its elements
list_data <- list(list1, list2)
print ("The original list is : ")
print (list_data)
# deleting third component of first list
list_data[[1]][[3]] = NULL
print ("Modification 1")
print (list_data)
# deleting second inner list
list_data[[2]] <- NULL
print ("Modification 2")
print (list_data)
输出:
[1] "The original list is : "
[[1]]
[[1]][[1]]
[1] 1 2 3 4 5
[[1]][[2]]
[1] "hi"
[[1]][[3]]
[1] 0+5i
[[2]]
[[2]][[1]]
[1] 6 7 8
[1] "Modification 1"
[[1]]
[[1]][[1]]
[1] 1 2 3 4 5
[[1]][[2]]
[1] "hi"
[[2]]
[[2]][[1]]
[1] 6 7 8
[1] "Modification 2"
[[1]]
[[1]][[1]]
[1] 1 2 3 4 5
[[1]][[2]]
[1] "hi"
修改 1 后,内部列表 1 的大小减少了 1。修改2后,删除第二个内链表,外链表大小减一。