2012-03-08 19 views
26

Ho un compito piuttosto semplice ma non ho trovato una buona soluzione.Come sottoinsieme da un elenco in R

> mylist 
[[1]] 
[1] 1 2 3 4 5 6 7 8 9 10 

[[2]] 
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" 

[[3]] 
[1] 25 26 27 28 29 30 31 32 

y <- c(3,5,9)  

vorrei estrarre da mylist i sub-elementi 3,5, e 9 di ciascun componente della lista. Ho provato, ma non sapply[mylist,"[[",y] fortuna !, e altri come vapply, lapply, ecc .. Grazie in anticipo per il vostro aiuto

Mauricio Ortiz

risposta

16

Cercare di utilizzare [ invece di [[ (ea seconda di ciò che si' dopo che la luce in realtà vuole lapply).

Da ?'[[':

La distinzione più importante tra le [, [[e $ è che il [può selezionare più di un elemento, mentre gli altri due selezionare un singolo elemento .

26

Potreste usare sapply(mylist, "[", y):

mylist <- list(1:5, 6:10, 11:15) 
sapply(mylist, "[", c(2,3)) 
-1

Ci sono modi migliori di fare questo, ma qui è una soluzione rapida.

# your values 
list1<-1:10 
list2<-letters[1:26] 
list3<-25:32 

# put 'em together in a list 
mylist<-list(list1,list2,list3) 

# function 
foo<-function(x){x[c(3,5,9)]} 

# apply function to each of the element in the list 
foo(mylist[[1]]) 
foo(mylist[[2]]) 
foo(mylist[[3]]) 

# check the output 

> foo(mylist[[1]]) 
[1] 3 5 9 
> foo(mylist[[2]]) 
[1] "c" "e" "i" 
> foo(mylist[[3]]) 
[1] 27 29 NA 
+2

Utilizzare 'lapply', in questo momento questa soluzione non scalabile del tutto quando 'mylist' diventa più grande. –

6

Utilizzando lapply:

# create mylist 
list1<-1:10 
list2<-letters[1:26] 
list3<-25:32 
mylist<-list(list1,list2,list3) 

# select 3,5,9th element from each list 
list.2 <- lapply(mylist, function(x) {x[c(3,5,9)]}) 
2

purrr fornisce un'altra soluzione per risolvere questo tipo di manipolazioni della lista all'interno della tidyverse

library(purrr) 
library(dplyr) 

desired_values <- c(1,3) 

mylist <- list(1:5, letters[1:6], 11:15) %>% 
purrr::map(`[`,desired_values) 

mylist 
Problemi correlati