आर

2012-03-08 6 views
26

में किसी सूची से सबसेट कैसे करें मेरे पास एक आसान काम है लेकिन मुझे कोई अच्छा समाधान नहीं मिला है।आर

> 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)  

मैं MyList उप तत्वों 3,5, और सूची में प्रत्येक घटक की 9 से निकालने के लिए चाहते हैं। मैं कोशिश की है, लेकिन sapply[mylist,"[[",y] नहीं भाग्य !, और vapply अन्य लोगों की तरह, lapply, आदि .. आपकी मदद के लिए अग्रिम धन्यवाद

मौरिसियो Ortiz

उत्तर

16

[[ के बजाय [ का उपयोग कर (और आप क्या पर निर्भर करता है की कोशिश करो ' प्रकाश के बाद वास्तव में lapply चाहते हैं)।

?'[[' से:

के बीच सबसे महत्वपूर्ण अंतर [, [[और $ कि [ एक से अधिक तत्व का चयन कर सकते हैं अन्य दो का चयन जबकि एक भी तत्व है।

26

आप sapply(mylist, "[", y) इस्तेमाल कर सकते हैं:

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

ऐसा करने के लिए बेहतर तरीके हैं, लेकिन यहाँ एक त्वरित समाधान है।

# 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

'lapply' का उपयोग करें, अभी इस समाधान पैमाने पर नहीं है बिल्कुल जब 'mylist' बड़ा हो जाता है। –

6

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 tidyverse भीतर सूची जोड़तोड़ की इन प्रकार के हल करने के लिए एक और समाधान प्रदान करता है

library(purrr) 
library(dplyr) 

desired_values <- c(1,3) 

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

mylist