如何在R中组合两个列表

Posted

技术标签:

【中文标题】如何在R中组合两个列表【英文标题】:How to combine two lists in R 【发布时间】:2016-08-08 12:13:37 【问题描述】:

我有两个列表:

l1 = list(2, 3)
l2 = list(4)

我想要第三个列表:

list(2, 3, 4).

我怎样才能以简单的方式做到这一点。 虽然我可以在 for 循环中做到这一点,但我期待一个单一的答案,或者可能是一个内置的方法。

其实我有一个名单:list(list(2, 3), list(2, 4), list(3, 5), list(3, 7), list(5, 6), list(5, 7), list(6, 7)). 在对list(2, 3)list(2, 4) 进行计算后,我想要list(2, 3, 4)

【问题讨论】:

c(l1, l2)?如果您还有其他期望,能否请您详细说明一下和/或分享您的列表和所需的输出? 它的格式和我上面提供的一样。 我有一个列表:list(list(2, 3), list(2, 4), list(3, 5), list(3, 7), list(5, 6),列表(5, 7),列表(6, 7))。在计算 list(2, 3) 和 list(2, 4) 之后,我想要 list(2, 3, 4)。就是这样。 @Vincent 先到了这里。这是他的答案。 来自您的编辑:如果您有 list(2, 3)list(2, 4), 并且想要 list(2, 3, 4),您可能还想要 unique(c(l1, l2)) 【参考方案1】:

c 可用于列表(不仅限于向量):

# you have
l1 = list(2, 3)
l2 = list(4)

# you want
list(2, 3, 4)
[[1]]
[1] 2

[[2]]
[1] 3

[[3]]
[1] 4

# you can do
c(l1, l2)
[[1]]
[1] 2

[[2]]
[1] 3

[[3]]
[1] 4

如果你有一个列表列表,你可以用do.call 做(也许)更舒服,例如:

do.call(c, list(l1, l2))

【讨论】:

如何将此代码应用于 n 个列表?假设我有 100 个列表,并且想使用 c() 将它们组合起来。我可以在不写c(l1, l2, l3, l4...l100 的情况下做到这一点吗? @NorthLattitude 创建列表时,必须有一种方法可以将所有列表放入列表中;-)。否则,parse/eval 仍然可行,即:l1 <- "a"; l2 <- "b" ; l3 <- "c"; eval(parse(text=paste0("list(", paste0("l", 1:3, collapse = ", "), ")")))【参考方案2】:

我们可以使用append

append(l1, l2)

它还具有在特定位置插入元素的参数。

【讨论】:

@Zach pastepaste0 将字符串连接到一个更大的字符串中。由于我没有理解清楚,您能否再描述一下这个问题? @akrun 两个以上列表的语法如何? @Frosi 你可以做c(l1, l2, l3)append() 只是c() 的包装,但只需要两个参数。【参考方案3】:

我想做同样的事情,但是为了将列表保留为一个字符串数组,所以我编写了一个新代码,从我一直在阅读的内容来看,它可能不是最有效的,但对我有用需要做的:

combineListsAsOne <-function(list1, list2)
  n <- c()
  for(x in list1)
    n<-c(n, x)
  
  for(y in list2)
    n<-c(n, y)
  
  return(n)

它只是创建一个新列表并从两个提供的列表中添加项目以创建一个。

【讨论】:

以上是关于如何在R中组合两个列表的主要内容,如果未能解决你的问题,请参考以下文章

在r中创建一个带有条件的组合列表[重复]

如何组合列表中的两个区间

如何在 R 中迭代地过滤列表中的列表或如何同时使用两个条件过滤 data.table,在运行时创建对象

R组合了两个sfc_polygons列表

如何在R中创建字符串组合

如何计算两个 ZIP 之间的距离?