Saturday, 15 January 2011

r - how to vectorize with xml data? -


हम कहते हैं, मेरे पास यह XML फ़ाइल है:

  & lt;? Xml version = " 1.0 "एन्कोडिंग =" यूटीएफ -8 "? & Gt; & LT; TimeSeries & gt; & LT; समयक्षेत्र & gt; 1.0 & lt; / समयक्षेत्र & gt; & LT; श्रृंखला & gt; & LT; हैडर / & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "10:00:00" मान = "0.0" ध्वज = "2" & gt; & lt; / event & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "10:15:00" मान = "0.0" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "10:30:00" मान = "0.0" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "10:45:00" मान = "0.0" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "11:00:00" मान = "0.0" ध्वज = "2" & gt; & lt; / event & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "11:15:00" मान = "0.0" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; / श्रृंखला & gt; & LT; श्रृंखला & gt; & LT; हैडर / & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "08:00:00" मान = "1.0" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "08:15:00" मान = "2.6" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "09:00:00" मान = "6.3" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "09:15:00" मान = "4.4" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "09:30:00" मान = "3. 9" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "09:45:00" मान = "2.0" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "10:00:00" मान = "1.7" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "10:15:00" मान = "2.3" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "10:30:00" मान = "2.0" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; / श्रृंखला & gt; & LT; श्रृंखला & gt; & LT; हैडर / & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "10:00:00" मान = "0.0" ध्वज = "2" & gt; & lt; / event & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "10:15:00" मान = "0.0" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "10:30:00" मान = "0.0" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "10:45:00" मान = "0.0" ध्वज = "2" & gt; & lt; / घटना & gt; & Lt; इवेंट की तारीख = "2009-09-30" समय = "11:00:00" मान = "0.0" ध्वज = "2" & gt; & lt; / event & gt; & Lt; / श्रृंखला & gt; & Lt; / TimeSeries & gt;  

और हम कहते हैं कि मैं अपनी श्रृंखला के तत्वों के साथ कुछ करना चाहता हूं और यह कि मैं सद्भावना को 'सदिश करने योग्य' सलाह देने वाला व्यवहार करना चाहता हूं ... मैं XML पुस्तकालय आयात करता हूं और ऐसा करता हूं निम्नलिखित:

  आर & gt; लाइब्रेरी ("XML") आर & gt; डॉक्टर & lt; - xmlTreeParse ('/ home / mario / desktop / sample.xml') आर & gt; टाइम सिरीजनोड & lt; - xmlRoot (doc) आर & gt; श्रृंखलानोड & lt; - xmlElementsByTagName (टाइम सिरीजनोड, "श्रृंखला") आर & gt; लंबाई (श्रृंखलानोड) [1] 3 आर & gt; (कार्य (एक्स) {लंबाई (xmlElementsByTagName (x [['श्रृंखला']], 'घटना'))} +) (श्रृंखलानोड) [1] 6 आर & gt;  

और मुझे समझ में नहीं आ रहा है कि मुझे केवल पहले तत्व को फ़ंक्शन लगाने का नतीजा क्यों प्राप्त करना चाहिए: मुझे तीन मानों की उम्मीद थी, जैसे सीरीजनोड की लंबाई, ऐसा कुछ:

  आर & gt; Mapply (लंबाई, श्रृंखला नोड्स) श्रृंखला श्रृंखला श्रृंखला 7 10 6  

ओह! मैं पहले ही जवाब के साथ आया था: " mapply का उपयोग करें:

  R & gt; Mapply (function (x) {length (xmlElementsByTagName (x, 'event'))}, seriesNodes) श्रृंखला श्रृंखला श्रृंखला 6 9 5  

लेकिन फिर मैं निम्नलिखित समस्या को देखता हूं: R- नरक मुझसे कहता है कि मैं "पाश-छुपा रहा हूं", "वेक्टरिंग" नहीं है! क्या मैं लूपिंग से बिल्कुल बचा सकता हूं? आप xpathApply या xpathSApply / कोड> - ये फ़ंक्शन किसी XPath विनिर्देशन का उपयोग करके नोड सेट निकालता है और फिर प्रत्येक सेट में फ़ंक्शन निष्पादित करता है। इन दोनों फ़ंक्शन को XML पैकेज द्वारा प्रदान किया जाता है। इन कार्यों का उपयोग करने के लिए, XML दस्तावेज़ को xmlInternalTreeParse का उपयोग करके या useInternalNodes के विकल्प के साथ xmlTreeParse सेट होना चाहिए true:

  की आवश्यकता (XML) countEvents & lt; - फ़ंक्शन (सीरीज) {events & lt; - xmlElementsByTagName (श्रृंखला, 'घटना') रिटर्न (लंबाई (ईवेंट))} डॉक्टर & lt; - xmlTreeParse ("नमूना Xml ", useInternalNodes = T) xpathSApply (डॉक्टर, '/ टाइम-शृंखला / श्रृंखला', काउंटी एवेंट्स) [1] 6 9 5  

मुझे नहीं पता कि यह कोई भी" तेज "है या नहीं लेकिन यह कोड निश्चित रूप से क्लीनर और बहुत ही स्पष्ट है जो XPath वाक्यविन्यास को जानता है और एक लागू फ़ंक्शन कैसे चल रहा है।


No comments:

Post a Comment