2017-09-22 2 views
0

J'ai une liste avec des collections de vecteurs et une deuxième liste (de même longueur) d'index. Je voudrais utiliser la deuxième liste pour extraire uniquement les éléments indexés de la première liste.Extraire des éléments d'une liste en utilisant les index d'une autre liste en utilisant R

dataList <- list(1:10, 101:150, LETTERS) 
indexList <- list(3:5, 10:15, c(1,5,9,15,21)) 

dire que je voudrais une fonction pour retourner une nouvelle liste de la même longueur que datalist, mais ne contenant que les membres indexés par indexList.

Répondre

1

Nous pouvons utiliser Map pour extraire les list éléments correspondants en fonction de l'indice de 'indexList'

Map(`[`, dataList, indexList) 

Ou en utilisant map2 de purrr

library(purrr) 
map2(dataList, indexList, `[`) 
1

En utilisant lapply()

dataList <- list(1:10, 101:150, LETTERS) 
indexList <- list(3:5, 10:15, c(1,5,9,15,21)) 
lapply(1:length(dataList), FUN=function(x, list1, list2) list1[[x]][list2[[x]]] , list1=dataList, list2=indexList) 

Ce qui donne: -

[[1]] 
[1] 3 4 5 

[[2]] 
[1] 110 111 112 113 114 115 

[[3]] 
[1] "A" "E" "I" "O" "U"