2013-05-14 85 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