2017-02-21 28 views
2

У меня есть список векторов (mylist):Subset список векторов с вектором позиций

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, чтобы извлечь соответствующие элементы «MyList» от индекса «mypos»

Map(`[`, mylist, mypos) 

В коде ОП, в том «mypos» повторяется в каждом из list элементов, в результате извлечения всех элементов из индекс. Вместо этого он может быть закодирован в последовательности

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

'mapply (\' [\ ', mylist, mypos]', предполагая, что все в порядке с объединенными результатами. – Frank

+0

Это единственное, спасибо. Я обязательно прочитаю «Map()» для будущего использования. –

Смежные вопросы