R根据名称拆分列表

时间:2015-07-24 07:45:09

标签: r list

假设我创建了以下结构

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)的向量。

对于我的生活,我无法弄清楚如何做到这一点。

3 个答案:

答案 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