2013-04-09 15 views
54

R में डेटाफ्रेम और सूची के बीच अंतर क्या है? किसका इस्तेमाल किया जाना चाहिए? लूप पर कौन सा आसान है?आर में डेटाफ्रेम और सूची के बीच क्या अंतर है?

सटीक समस्या: मुझे पहले "ए", "बी", "सी" जैसे 3 स्ट्रिंग तत्वों को स्टोर करना होगा। बाद में इनमें से प्रत्येक के लिए, मुझे 3 और तत्वों को जोड़ने की जरूरत है; उदाहरण के लिए "ए" के लिए मुझे "ए 1", "ए 2", "ए 3" जोड़ना होगा। बाद में मुझे इन तत्वों तक पहुंचने के लिए लूप के लिए नेस्टेड का उपयोग करना होगा।

तो मैं डेटाफ्रेम या सूची या कुछ अन्य डेटा प्रकार का उपयोग करने में उलझन में हूं, जिसमें मैं पहले स्टोर कर सकता हूं और फिर संलग्न कर सकता हूं (प्रत्येक कॉलम का प्रकार)?

वर्तमान में मैं त्रुटियों हो रही है, जैसे

+0

मुझे लगता है कि इन आप मदद कर सकते हैं .. http://www.r-tutor.com/r- परिचय/डेटा-फ्रेम और http://www.r-tutor.com/r-introduction/list – Futuregeek

+0

क्या वाकई यह बुरा सवाल था? मैं आर में एक नौसिखिया हूं और जावा और सी # से आ रहा हूं, यह पटकथा भाषा मुश्किल लग रही है ... :( – ShazSimple

+1

@ShazSimple सवाल स्वयं ही बुरा नहीं है। यह बहुत ही सामान्य है। अगर आप अपनी विशिष्ट समस्या का समाधान चाहते हैं , आपको हमें एक न्यूनतम पुनरुत्पादित उदाहरण के साथ प्रस्तुत करना होगा, जैसा कि समझाया गया है [http] // http: // stackoverflow।com/प्रश्न/5963269/कैसे करने वाली बनाने के एक महान-R-प्रतिलिपि प्रस्तुत करने योग्य-उदाहरण)। इसके लिए, कृपया एक नया प्रश्न बनाएं। हम इसे यहां एक संदर्भ के रूप में छोड़ सकते हैं। –

उत्तर

95

प्रश्न के रूप में बेवकूफ के रूप में कुछ लोगों को लगता है कि यह है नहीं है "आइटम को बदलने के लिए की संख्या प्रतिस्थापन लंबाई की एक बहु नहीं है।" मुझे पता है कि बहुत से लोग उस अंतर से जूझ रहे हैं, और कहां उपयोग करना है। सारांशित करने के लिए:

सूचियां आर में सबसे लचीली डेटा संरचना तक हैं। उन्हें प्रत्येक तत्व की कक्षा, लंबाई या संरचना पर किसी भी प्रतिबंध के बिना तत्वों के संग्रह के रूप में देखा जा सकता है। केवल एक चीज जिसकी आपको देखभाल करने की आवश्यकता है, यह है कि आप दो तत्वों को एक ही नाम नहीं देते हैं। यही कारण है कि भ्रम का एक बहुत कारण हो सकता है, और अनुसंधान कि के लिए त्रुटियों को नहीं देता:

> X <- list(a=1,b=2,a=3) 
> X$a 
[1] 1 

डाटा फ्रेम सूची के रूप में अच्छी तरह से कर रहे हैं, लेकिन वे कुछ प्रतिबंध होते हैं:

  • आप उपयोग नहीं कर सकते दो अलग-अलग चर के लिए एक ही नाम
  • डेटा फ्रेम के सभी तत्व वैक्टर
  • डेटा फ्रेम के सभी तत्वों की लंबाई बराबर होती है।

इन प्रतिबंधों और जिसके परिणामस्वरूप दो आयामी संरचना के कारण, डेटा फ्रेम कर सकते हैं mimick मैट्रिक्स के व्यवहार से कुछ हैं। आप पंक्तियों का चयन कर सकते हैं और पंक्तियों पर संचालन कर सकते हैं। आप सूचियों के साथ ऐसा नहीं कर सकते, क्योंकि एक पंक्ति वहां अपरिभाषित है।

यह सब का तात्पर्य है कि आपको किसी भी डेटासेट के लिए डेटा फ्रेम का उपयोग करना चाहिए जो उस twodimensional संरचना में फिट बैठता है। अनिवार्य रूप से, आप किसी भी डेटासेट के लिए डेटा फ्रेम का उपयोग करते हैं जहां एक कॉलम एक चर के साथ मेल खाता है और एक पंक्ति शब्द की व्यापक अर्थ में एक अवलोकन के साथ मेल खाता है। अन्य सभी संरचनाओं के लिए, सूचियां जाने का रास्ता हैं।

ध्यान दें कि यदि आप नेस्टेड संरचना चाहते हैं, तो आपको सूचियों का उपयोग करना होगा। चूंकि सूची के तत्व स्वयं को सूचीबद्ध कर सकते हैं, आप बहुत लचीली संरचित वस्तुओं को बना सकते हैं। उदाहरण को

+1

प्रश्न का पालन करें: मेरे पास तीन विशाल डेटा फ्रेम हैं और मुझे उन पर कई समान कार्य करना है। क्या मुझे उन्हें एक सूची में रखना चाहिए और 'लापरवाही' या मुझे उन्हें अलग रखना चाहिए? कौन सा मेरी याददाश्त पर कम टोल लेने जा रहा है और मेरे कंप्यूटर को मुक्त करने की संभावना कम है? – vagabond

+1

@ वागाबॉन्ड मुझे यह जांचना चाहिए, लेकिन मुझे संदेह होगा कि बोतल की गर्दन संशोधित सूची का निर्माण लापरवाही से होगी। यदि आप चाहें तो आप खुद को Rprofmem और tracemem से देख सकते हैं। –

0

देखो: आप वर्ग पाने के लिए sapply के बजाय लागू का उपयोग करते हैं -

apply(iris,2,class) # function elements are rows or columns 
Sepal.Length Sepal.Width Petal.Length Petal.Width  Species 
"character" "character" "character" "character" "character" 

sapply(iris,class) # function elements are variables 
Sepal.Length Sepal.Width Petal.Length Petal.Width  Species 
"numeric" "numeric" "numeric" "numeric"  "factor" 
संबंधित मुद्दे