按名称拆分R列表

3
假设我创建了以下结构
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) 的向量。
说实话,我真的不知道该怎么做。

blah <- list(a = 1:10, b = 1:10+10) - Andriy T.
它需要从一个for循环中解析出来——这只是一个简化的情况。 - Shuo
我明白了...看看我的更新。 - Andriy T.
3个回答

2

我认为这个应该可以工作。我首先根据元素名称拆分了您的列表,然后“取消”每个列表元素内部的列表。您还可以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))

这也可以运行,并且可能更有效率。


谢谢。这正是我所需要的。 - Shuo
5
这里不需要循环,只需要使用split(unlist(blah), names(blah))即可。 - David Arenburg

1
实际上,您可以避免循环:
blah <- list(a = 1:10, b = 1:10+10)

And you get this:

# > 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
}

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

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