📜  R编程中的二维列表

📅  最后修改于: 2022-05-13 01:55:30.754000             🧑  作者: Mango

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后,删除第二个内链表,外链表大小减一。