2012-07-17 11 views
14

से ऑब्जेक्ट का हिस्सा निकालें मैं केवल आर सीख रहा हूं और सूची में ऑब्जेक्ट्स से तत्वों को निकालने के तरीके के बारे में अपने सिर को लपेटने में कठिनाई कर रहा हूं। मैंने सूची में ऑब्जेक्ट देकर आर में एक जेसन फ़ाइल पार्स की है। लेकिन मैं सूची से विभिन्न जेसन तत्वों को निकालने के लिए, वहां से, कैसे नहीं समझ सकता।आर में, सूची

> #Parse data into R objects# 
> list.Json= fromJSON(,final.name, method = "C") 
> head(listJson,6) 
[[1]] 
[[1]]$contributors 
NULL 

[[1]]$favorited 
[1] FALSE 

...[truncating]... 
[[5]] 
[[5]]$contributors 
NULL 

[[5]]$favorited 
[1] FALSE 

मैं पता लगा सकते हैं सूची

> first.object=listJson[1] 
> ff=first.object[[1]]$favorited 
> ff 
[1] FALSE 

लेकिन मैं कर रहा हूँ में वस्तुओं में से एक के लिए पसंदीदा डेटा निकालने के लिए कैसे: यहाँ कैसे अपने डेटा json पार्स करने के बाद दिखाई देता में एक छोटा वर्णन दिया गया है सूची में सभी वस्तुओं के लिए अनुकूल निकालने के बारे में बहुत उलझन में है। मैंने खुशी से देखा है, क्या यह सही दृष्टिकोण है? क्या मुझे उपरोक्त कोड को इसके लिए ... अगले लूप में रखना होगा?

+0

सूची आर में थोड़ा उलझन में हैं। वे वास्तव में अन्य भाषाओं से हैशपैप्स/शब्दकोशों के समान हैं। कुछ अंतर्दृष्टि प्राप्त करने के लिए http://stackoverflow.com/questions/2050790/how-to-correctly-use-lists-in-r पर एक नज़र डालें। – Wilduck

+1

जेएसओएन को 'data.frame' में कनवर्ट करना दर्द हो सकता है, खासकर यदि एक ऑब्जेक्ट से अगली तक की चाबियाँ समान होने की गारंटी नहीं देती हैं। मुझे @ जेफ एलन का जवाब पसंद आया, लेकिन सावधान रहें जब आपके लापता मान 'NA' के बजाय' NULL' हैं। (यदि आप 'RJSONIO'' का उपयोग कर रहे हैं, तो आप 'सेजसन (..., nullValue = NULL)' का उपयोग करके डिफ़ॉल्ट को नियंत्रित कर सकते हैं। उदाहरण के लिए, 'sapply (listJson, "[[", "योगदानकर्ता")' एक सूची लौटाता है जब उसके अनुपलब्ध मान 'NULL' होते हैं लेकिन जब वे अनुपलब्ध मान 'NA' होते हैं तो वेक्टर लौटाते हैं। – lockedoff

उत्तर

29

sapply आपकी सूची में प्रत्येक तत्व को कुछ फ़ंक्शन लागू करने जा रहा है। आपके मामले में, आप प्रत्येक तत्व को (नेस्टेड) ​​सूची में एक्सेस करना चाहते हैं। sapply निश्चित रूप से इस में सक्षम है। उदाहरण के लिए, आप अपनी सूची में प्रत्येक तत्व के पहले बच्चे का उपयोग करना चाहते हैं:

sapply(listJson, "[[", 1) 

या यदि आप आइटम "पसंदीदा बनाया" नाम का उपयोग करना चाहता था, आप इस्तेमाल कर सकते हैं:

sapply(listJson, "[[", "favorited") 

नोट कि [ ऑपरेटर उस सूची का एक सबसेट लेगा जिसमें आप काम कर रहे हैं। तो जब आप myList[1] तक पहुंचते हैं, तो आपके पास अभी भी एक सूची है, यह लंबाई 1 है। हालांकि, यदि आप myList[[1]] का संदर्भ देते हैं, तो आपको अपनी सूची में पहली जगह के सामग्री मिल जाएगी (जो कि एक और सूची हो सकती है या नहीं) । इस प्रकार, आप [[ ऑपरेटर का उपयोग सैपली में करेंगे, क्योंकि आप सूची की सामग्री पर उतरना चाहते हैं।

+0

धन्यवाद, आर सूचियों के चारों ओर मेरे सिर लपेटकर एक चुनौती रही है। मैं आखिरकार यह लूप के साथ काम करने में सक्षम था: t1 = NULL (i में 1: लंबाई (list.Json)) { चेक = सूची। जेसन [[i]] $ (टाइप टाइप (चेक) == "न्यूल") { चेक = सूची (एनयूएलएल) } टी 1 = सी (टी 1, चेक) } – Martin

+2

जो कि अजीब है, लेकिन वास्तव में उपयोगी है – kpierce8