如何在R中将多个列表附加到一个列表?

4

我是一个有用的助手,将为您进行文本翻译。以下是需要翻译的内容:

我有四个列表:三个等大小的填充列表和一个空列表,例如:

list1<-as.list(c(1:10))
list2<-as.list(c(101:110))
list3<-as.list(c(1001:1010))
list4<-list()

我想将第一、二、三个列表中的第i个元素追加到第四个列表中。 第四个列表应如下所示:
[1,101,1001,2,102,1002,....,10,110,1010]

我该如何操作呢?我的代码目前看起来是这样的:
for (i in length(list1)){
  local({
    i<-i
    list4.append(list1[i])
    list4.append(list2[i])
    list4.append(list3[i])

  })
}

但是我收到了错误信息:
could not find function "list4.append"
2个回答

3
你可以使用 mapply 将多个列表组合成一个。在 mapply 中使用的函数是 c
list4 <- mapply(c, list1, list2, list3, SIMPLIFY = F)

样本数据:

list1 <- as.list(c(1:10))
list2 <- as.list(c(101:110))
list3 <- as.list(c(1001:1010))

@BharatDesai - c 是要应用的函数(FUN)。 - DJV

1

使用您在for循环中的方法,需要进行一些调整。

list1<-as.list(c(1:10))
list2<-as.list(c(101:110))
list3<-as.list(c(1001:1010))
list4<-list()

for (i in seq_along(list1)){
    list4 <<- append(list4, list1[i])
    list4 <<- append(list4, list2[i])
    list4 <<- append(list4, list3[i])
}
  • 不要使用local,否则你将无法修改list4
  • 在for循环外使用<<-来分配给list4
  • append是一个你分配在对象上的函数。它不能像python中的对象方法obj.method那样调用。

虽然在R中我们可以使用for循环,但是尽可能避免使用它们。


另一种解决方案是使用purrr包来处理列表和函数编程。您可以通过以下方式获得结果:
library(purrr)
pmap(list(list1, list2, list3), c) %>% simplify()
#>  [1]    1  101 1001    2  102 1002    3  103 1003    4  104 1004    5  105
#> [15] 1005    6  106 1006    7  107 1007    8  108 1008    9  109 1009   10
#> [29]  110 1010

pmap 按顺序对列表中的每个元素应用函数。 (首先是list1、list2和list3的第一个元素,然后是list1、list2和list3的第二个元素,依此类推...) simplify 用于在最后获得一个向量,_简化列表结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接