आर

2013-02-09 73 views
5

में डेटा.फ्रेम में संग्रहीत सूचियों पर इटरेट करना मुझे लगता है कि यह एक शुरुआती प्रश्न है, लेकिन मुझे प्रभावी Google खोज के लिए सही शब्दावली नहीं दिखती है।आर

मेरे पास डेटा.फ्रेम, final है, जिसमें clusters की एक सूची है, जिनमें से प्रत्येक स्ट्रिंग्स की एक सूची है।

मैं प्रत्येक क्लस्टर में तारों की सूची में पुन: प्रयास करना चाहता हूं: लूप के लिए एक लूप के लिए।

for (j in final$clusters){ 
    for (i in final$clusters$`j`){ 
     print final$clusters$`j`[i] 
    } 
} 

jclusters में सूचियों के बराबर है और i प्रत्येक समूह की लंबाई, जो मैं length(final$clusters[1]) की तरह कुछ होगा सोचा का उपयोग करके clusters[j]

मैं यह करने के कोशिश कर रहा था में आइटम से मेल खाती है, लेकिन यह 1 की सूची देता है, सूची की लंबाई नहीं।

इसके अलावा, final$clusters[1] $ देता है '1', और अगली पंक्ति पर, क्लस्टर में सभी तार 1.

धन्यवाद।

संपादित करें: dput(str(final)) के उत्पादन, के रूप में अनुरोध:

List of 2 
$ clusters  :List of 1629 
    ..$ 1 : 
    ..$ 2 : 
    ..$ 3 : 
    ..$ 4 : 
    ..$ 5 : 
    ..$ 6 : 
    ..$ 7 : 
    ..$ 8 : 
    ..$ 9 : 
    ..$ 10 : 
    .. [list output truncated] 
$ cluster_stats: num [1:1629, 1:6] 0.7 0.7 0.7 0.7 0.7 0.7 ... 
    ..- attr(*, "dimnames")=List of 2 
    .. ..$ : chr [1:1629] "1" "2" "3" "4" ... 
    .. ..$ : chr [1:6] "min" "qu1" "median" "mean" ... 
NULL 

उत्तर

3

मुझे लगता है कि आप एक भ्रमित list और data.frame। मुझे लगता है कि आपका अंतिम वस्तु एक सूची है।

सूची में पुन: प्रयास करने के लिए आप rapply का उपयोग कर सकते हैं। यह लापरवाही का एक पुनरावर्ती संस्करण है।

उदाहरण के लिए:

## I create some reproducible example 

clusters <- list(cluster1,cluster2) 
cluster1 <- list(a='a',b='b') 
cluster2 <- list(c='aaa',d='bbb') 
final <- list(clusters) 

तो rapply

rapply(final,f=print) 
[1] "a" 
[1] "b" 
[1] "aaa" 
[1] "bbb" 
    a  b  c  d 
    "a" "b" "aaa" "bbb" 

का उपयोग कर अद्यतन संपादन के बाद ओपी

द्वारा lapply का उपयोग करना, मैं सूची के नाम पर के माध्यम से लूप। प्रत्येक नाम के लिए, मुझे [[ का उपयोग करके तत्व सूची मिलती है (यदि आप फ़ाइलों के लिए नाम और हेडर प्राप्त करना चाहते हैं तो आप [ का उपयोग कर सकते हैं), तो मैं write.table का उपयोग कर फ़ाइल लिखता हूं। यहां मैं फ़ाइल नाम बनाने के लिए सूची में तत्व के नाम का उपयोग करता हूं। आपके मामले में आपके पास फ़ाइल नाम संख्या के रूप में होगा। (1.txt, ...)

lapply(names(final$clusters), 
         function(x) 
          write.table(x=final$clusters[[x]], 
             file=paste(x,'.txt',sep=''))) 
+0

तो सूचियों की सूची मुद्रित करने के लिए, जैसा कि आपने कहा है, 'रैप्ली' काम कर रहा है (स्पष्टीकरण के लिए धन्यवाद)। हालांकि, मैं एक समय में केवल एक सूची को मुद्रित करना चाहता हूं (वास्तव में, मैं प्रत्येक 'क्लस्टर' को एक अलग फ़ाइल में मुद्रित करने के लिए 'सिंक' का उपयोग करने की उम्मीद कर रहा था), लेकिन मुझे काम पर 'प्रिंट' नहीं मिल रहा है , @ pipo98 की सहायता और आपका उपयोग करके: 'के लिए (अंतिम $ क्लस्टर में जे) {रैप्ली (अंतिम $ क्लस्टर [जे], एफ = प्रिंट)}' 'NULL 'की कई पंक्तियां लौटाता है। – dd3

+0

@ dd3 को 'rapply' को 'for' के साथ संयोजित करने की आवश्यकता नहीं है। 'रैप्ली' पत्तियों को पाने के लिए सूची के माध्यम से रिक्त रूप से जायेगा .. क्या आप कृपया 'ड्यूटी (स्ट्र (फाइनल)) को दबा सकते हैं और इसे अपने प्रश्न में जोड़ सकते हैं ... – agstudy

+0

समस्या यह है कि मैं केवल एक के लिए ऐसा करना चाहता हूं एक समय में sublists के। आपके उदाहरण में, मैं केवल 'क्लस्टर 1' का आउटपुट प्राप्त करना चाहता हूं, उसे फ़ाइल में लिखना चाहता हूं, और फिर अन्य क्लस्टर के लिए भी ऐसा ही करना चाहिए, प्रत्येक एक अलग फ़ाइल में लिख रहा है। मैंने आपके प्रश्न के लिए अनुरोध किए गए आउटपुट को जोड़ा है। आपकी सहायता के लिए धन्यवाद. – dd3

4

मुझे लगता है कि प्राथमिक समस्या यहां जिस तरह से आप यहाँ पुनरावृति गलत है।

मुझे लगता है कि कुछ इस तरह बेहतर काम करेगा: subsetting के लिए http://manuals.bioinformatics.ucr.edu/home/programming-in-r#TOC-For-Loop :

for (j in final$clusters){ 
    for (i in final$clusters[j]){ 
     print i 
    } 
} 

यहाँ छोरों के लिए दस्तावेज़ है http://www.statmethods.net/management/subset.html

सौभाग्य

+0

इसे पकड़ने के लिए धन्यवाद! हालांकि, यह पूरी तरह से मेरी समस्या का समाधान नहीं करता है। (मैं आपका जवाब उखाड़ फेंक दूंगा, लेकिन मेरे पास ऐसा करने की प्रतिष्ठा नहीं है। क्षमा करें।) – dd3

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^