假设我创建了以下结构
blah <- c()
for (i in 1:10) {
blah <- c(blah,list(a=i,b=i+10))
}
我希望blah$a
成为(1,2,3,4,5,6,7,8,9,10)
和blah$b
的向量,成为(11,12,13,14,15,16,17,18,19,20)
的向量。
对于我的生活,我无法弄清楚如何做到这一点。
答案 0 :(得分:2)
我认为这应该有效。我首先根据元素的名称拆分列表然后&#34;取消列表&#34;每个列表元素中的列表列表。您还可以unname
每个向量(未显示)。见代码:
lapply(split(x = blah, f = names(blah)), unlist)
$a
a a a a a a a a a a
1 2 3 4 5 6 7 8 9 10
$b
b b b b b b b b b b
11 12 13 14 15 16 17 18 19 20
在评论中,@ David提及
split(unlist(blah), names(blah))
也有效,可能效率更高。
答案 1 :(得分:1)
实际上你可以避免循环:
blah <- list(a = 1:10, b = 1:10+10)
你明白了:
# > blah
# $a
# [1] 1 2 3 4 5 6 7 8 9 10
#
# $b
# [1] 11 12 13 14 15 16 17 18 19 20
# > blah$a
# [1] 1 2 3 4 5 6 7 8 9 10
带循环:
for (i in 1:10) {
blah$a[i] <- i
blah$b[i] <- i+10
}
答案 2 :(得分:0)
blah <- list()
for (i in 1:10) {
blah[['a']][i] <- i; blah[['b']][i] <- i+10
}
blah
$a
[1] 1 2 3 4 5 6 7 8 9 10
$b
[1] 11 12 13 14 15 16 17 18 19 20