2013-05-14 68 views
2

我有等于2的深度,我想在下面的例子中所描述的下标是列表的列表:与深度等于创建列表2

my.list<-list(
    a=list(
    a1=1:10, 
    a2=11:20), 
    b=list(
    b1=21:30, 
    b2=31:40), 
    c=list(
    c1=41:50, 
    c2=51:60) 
) 
# choose a specific item 
my.list[[2]][[2]][[3]] 

# choose all first items from a1,a2,b1,b2,c1,c2 
test<-list() 
for(i in 1:3) 
    for (j in 1:2)test[[i]][[j]]<-my.list[[i]][[j]][[1]] 

test 

Error in `*tmp*`[[i]] : subscript out of bounds 

但由于名单我这是不行的创建没有列表中。什么工作是做这样的:

test<-list() 
for(i in 1:3) 
    for (j in 1:2)test[[i]]<-my.list[[i]][[j]][[1]] 

然后

test<-list() 
for(i in 1:3) 
    for (j in 1:2)test[[i]][[j]]<-my.list[[i]][[j]][[1]] 

test 

给出:

[[1]] 
[1] 1 11 

[[2]] 
[1] 21 31 

[[3]] 
[1] 41 51 

...

回答

2

请问下面的代码解决问题了吗?

lapply(my.list, sapply, head, 1) 

给你的每个向量为每个条目的第一个元素在my.list

$a 
a1 a2 
1 11 

$b 
b1 b2 
21 31 

$c 
c1 c2 
41 51 
+0

是的,我认为这将有助于我莫名其妙。不过我想知道是否在创建新列表时没有任何内置的内建功能。 – Johannes 2013-05-14 12:37:18

+0

我觉得'lapply'是你正在寻找的内置函数:它迭代一个列表,创建一个新列表并返回它。参见'lapply' – user1981275 2013-05-14 12:43:17

+0

从你的编辑中我可以看到你想要的结果是一个有三个条目的列表,每个条目都包含一个向量。由于'lapply'返回一个列表,你可以使用'sapply'包装器来返回一个向量。我将编辑答案。 – user1981275 2013-05-14 12:45:33