2017-02-21 73 views
2

我有一個向量(mylist)列表:子集列表

a <- c(1,2,3,4) 
b <- c(5,6,7,8) 
c <- c(9,10,11,12) 
mylist <- list(a,b,c) 

我也有位置的向量(mypos):以

mypos <- c(1,2,3) 

我想使用mypos給出元素的位置以將每個矢量子集mypos以使其返回:

[1] 1 6 11 

我已經使用lapply這樣的嘗試:

lapply(mylist, "[", mypos) 

但這返回元件1,2和每個矢量的3:

[[1]] 
[1] 1 2 3 

[[2]] 
[1] 5 6 7 

[[3]] 
[1] 9 10 11 

我也曾嘗試:

lapply(mylist, subset, mypos) 

但這返回一個錯誤,該子集必須是邏輯的

回答

3

我們可以使用Map到從「mypos」

Map(`[`, mylist, mypos) 

在OP的代碼中,「mypos」重複中的每個導致從提取的所有元素list元素的索引中提取「MYLIST」的相應的元件該指數。相反,它可以在序列上循環

lapply(seq_along(mylist), function(x) mylist[[x]][mypos[[x]]]) 
+2

'mapply(\'[\',mylist,mypos)'假設它們在結果結合的情況下很好。 – Frank

+0

這是一個,謝謝。我一定會閱讀'Map()'以供將來使用。 –