如何从r中的多个列表中追加到列表?

时间:2018-06-04 05:38:55

标签: r list append

我有4个列表:3个大小相同的填充列表和1个空列表,例如:

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

我想将前3个列表中每个列表的第i个元素追加到第4个列表中。 列表4应如下所示:

[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 个答案:

答案 0 :(得分:2)

您可以使用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))

答案 1 :(得分:0)

使用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-like作为对象obj.method
  • 的方法

尽管For循环是我们可以习惯的,但在R中最好尽可能避免它们。

另一个解决方案是使用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,...的第2个) simplify在这里得到一个向量,_简化列表结果。