2012-05-27 21 views
33

मुझे नहीं पता कि आर में सूचियों की सूची कैसे बनाएं, मेरे पास कई सूचियां हैं, मैं उन्हें तक पहुंच बनाने के लिए एक डेटा संरचना में स्टोर करना चाहता हूं। हालांकि, ऐसा लगता है, आप आर में सूची की सूची का उपयोग नहीं कर सकते हैं, इसलिए यदि मुझे किसी अन्य सूची से सूची l1 मिलती है, तो कहें, l2 तो मैं तत्वों l1 तक नहीं पहुंच सकता। मैं इसे कैसे कार्यान्वित कर सकता हूं?आर। आर में सूचियों की सूची कैसे बनाते हैं?

संपादित मैं उदाहरण पर दिखाई देगा क्या मेरे लिए काम नहीं करता है:

list1 <- list() 
list1[1] = 1 
list1[2] = 2 
list2 <- list() 
list2[1] = 'a' 
list2[2] = 'b' 
list_all <- list(list1, list2) 
a = list_all[1] 
a[2] 
#[[1]] 
#NULL 

लेकिन a एक सूची होना चाहिए!

उत्तर

37

आप आसानी से सूचियों की सूची बना सकते हैं

list1 <- list(a = 2, b = 3) 
list2 <- list(c = "a", d = "b") 
mylist <- list(list1, list2) 

मेरी सूची अब एक सूची है जिसमें दो सूचियां हैं। सूची 1 तक पहुंचने के लिए आप mylist[[1]] का उपयोग कर सकते हैं। अपने संपादित करने के लिए जवाब देने के लिए: यदि आप mylist$list1 की तरह कुछ करने में सक्षम होना चाहते हैं, तो आप की तरह

mylist <- list(list1 = list1, list2 = list2) 
# Now you can do the following 
mylist$list1 

संपादित somethingl करने की ज़रूरत है। बस डबल ब्रैकेट अनुक्रमण

a <- list_all[[1]] 
a[[1]] 
#[1] 1 
a[[2]] 
#[1] 2 
+3

@capoluca Dason के विवरण, पर विस्तार करने के लिए 'list_all [1]' 'list_all' के पहले _element_ का चयन नहीं करता। सूचियों के लिए, '['_ _ublists_ को पुनर्प्राप्त करता है' [[' _elements_ पुनर्प्राप्त करता है। – joran

+0

यदि आप 'mylist <- list (list1, list1)' जैसी डुप्लिकेट सूचियों की एक सूची बनाते हैं, तो 'list1' प्रतिलिपि बनाई गई है या दो बार संदर्भित है? –

+0

क्या होगा यदि मैं लूप में सूचियों की एक सूची बना रहा हूं और इसलिए मेरे पास अलग-अलग उप-सूचियां नहीं हैं और चर में संग्रहित हैं। इसके बजाय, मैं उन्हें एक-एक करके सूचियों की सूची में जोड़ना चाहता हूं क्योंकि मैं उनकी गणना करता हूं। – Leonid

5

अपने उदाहरण :: उपयोग करना

list1 <- list() 
list1[1] = 1 
list1[2] = 2 
list2 <- list() 
list2[1] = 'a' 
list2[2] = 'b' 
list_all <- list(list1, list2) 

प्रयोग करें '[[' एक सूची का एक तत्व को पुनः प्राप्त करने:

b = list_all[[1]] 
b 
[[1]] 
[1] 1 

[[2]] 
[1] 2 

class(b) 
[1] "list" 
1

का उपयोग आप (अजगर के list.append() के समान) सूचियों की एक सूची रखने के लिए की तुलना में इस काम हो सकता है कोशिश कर रहे हैं:

a <- list(1,2,3) 
b <- list(4,5,6) 
c <- append(list(a), list(b)) 

> c 
[[1]] 
[[1]][[1]] 
[1] 1 

[[1]][[2]] 
[1] 2 

[[1]][[3]] 
[1] 3 


[[2]] 
[[2]][[1]] 
[1] 4 

[[2]][[2]] 
[1] 5 

[[2]][[3]] 
[1] 6 
0

के रूप में अन्य उत्तर में बताया पहले से ही एक जटिल तरीका, आपने पहले से ही सूचियों की एक सूची बनाई है! यह केवल आर का अजीब आउटपुट है जो भ्रमित करता है (सबको?)। इस प्रयास करें:

> str(list_all) 
List of 2 
$ :List of 2 
    ..$ : num 1 
    ..$ : num 2 
$ :List of 2 
    ..$ : chr "a" 
    ..$ : chr "b" 

और सबसे सरल निर्माण इस होगा:

> str(list(list(1, 2), list("a", "b"))) 
List of 2 
$ :List of 2 
    ..$ : num 1 
    ..$ : num 2 
$ :List of 2 
    ..$ : chr "a" 
    ..$ : chr "b"