我有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"
答案 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
在这里得到一个向量,_简化列表结果。