55

我不知道如何在 R 中制作列表列表。我有几个列表,我想将它们存储在一个数据结构中以便更轻松地访问它们。但是,看起来您不能在 R 中使用列表列表,因此如果我从另一个列表(例如 l2)获取列表 l1,那么我将无法访问元素 l1。我该如何实施?

编辑-我将展示一个对我不起作用的示例:

list1 <- list()
list1[1] = 1
list1[2] = 2
list2 <- list()
list2[1] = 'a'
list2[2] = 'b'
list_all <- list(list1, list2)
a = list_all[1]
a[2]
#[[1]]
#NULL

a应该是一个列表!

4

5 回答 5

60

您可以轻松制作列表列表

list1 <- list(a = 2, b = 3)
list2 <- list(c = "a", d = "b")
mylist <- list(list1, list2)

mylist 现在是一个包含两个列表的列表。要访问 list1,您可以使用mylist[[1]]. 如果您希望能够做类似的事情,mylist$list1那么您需要做类似的事情

mylist <- list(list1 = list1, list2 = list2)
# Now you can do the following
mylist$list1

编辑:回复您的编辑。只需使用双括号索引

a <- list_all[[1]]
a[[1]]
#[1] 1
a[[2]]
#[1] 2
于 2012-05-27T19:55:24.190 回答
10

使用您的示例::

list1 <- list()
list1[1] = 1
list1[2] = 2
list2 <- list()
list2[1] = 'a'
list2[2] = 'b'
list_all <- list(list1, list2)

使用 '[[' 检索列表的元素:

b = list_all[[1]]
 b
[[1]]
[1] 1

[[2]]
[1] 2

class(b)
[1] "list"
于 2012-05-27T19:54:39.590 回答
8

如果您试图保留 a listof lists (类似于python's list.append()),那么这可能有效:

a <- list(1,2,3)
b <- list(4,5,6)
c <- append(list(a), list(b))

> c
[[1]]
[[1]][[1]]
[1] 1

[[1]][[2]]
[1] 2

[[1]][[3]]
[1] 3


[[2]]
[[2]][[1]]
[1] 4

[[2]][[2]]
[1] 5

[[2]][[3]]
[1] 6
于 2016-07-18T20:55:40.383 回答
2

该示例在循环中创建命名列表的列表。

  MyList <- list()
  for (aName in c("name1", "name2")){
    MyList[[aName]] <- list(aName)
  }
  MyList[["name1"]]
  MyList[["name2"]]

要添加另一个名为“name3”的列表,请编写:

  MyList$name3 <- list(1, 2, 3)
于 2019-09-05T12:10:48.373 回答
-1

正如其他答案已经以更复杂的方式指出的那样,您确实已经创建了一个列表列表!只是 R 的奇怪输出让(每个人都感到困惑?)。试试这个:

> str(list_all)
List of 2
 $ :List of 2
  ..$ : num 1
  ..$ : num 2
 $ :List of 2
  ..$ : chr "a"
  ..$ : chr "b"

最简单的构造是这样的:

> str(list(list(1, 2), list("a", "b")))
List of 2
 $ :List of 2
  ..$ : num 1
  ..$ : num 2
 $ :List of 2
  ..$ : chr "a"
  ..$ : chr "b"
于 2017-06-01T13:14:21.490 回答