2012-12-18 16 views
9

मैं लोकप्रिय भाषाओं कि मैं सूचियों और शब्दकोशों अजगर में, पीएचपी (अनिवार्य रूप से हैश तालिका) में साहचर्य सरणियों, वैक्टर C++ में इस तरह के साथ अनुभव है में इस्तेमाल किया विभिन्न डेटा संरचनाओं के बारे में जानने की कोशिश कर रहा है, आदिआर में लागू वैक्टर, मैट्रिस, और डेटा फ्रेम कैसे हैं?

मेरे पास बहुत सारे सहयोगी हैं जो धार्मिक रूप से आर का उपयोग करते हैं और मैं सोच रहा था कि आर में वैक्टर, मैट्रिस और डेटा फ्रेम कैसे लागू किए जाते हैं। उनकी ताकत और कमजोरियां क्या हैं? मैं स्रोत कोड देख रहा था लेकिन मुझे डेटा संरचनाएं खुद नहीं मिल सका। स्रोत कोड में कहां स्थित हैं?

+0

क्या http://cran.r-project.org/doc/manuals/r-release/R-lang.html सहायता करता है? (जरूरी नहीं: यह कहता है कि कैसे डेटा संरचनाएं * परिभाषित * हैं, न कि उन्हें कैसे कार्यान्वित किया जाता है ...) –

+7

'$ R_SRC_HOME/src/main /' में, 'do_makevector' के लिए 'buildin.c' में देखें, और' do_matrix' के लिए 'array.c' में देखें। data.frames केवल क्लास 'data.frame' की सूचियां हैं, इसलिए आपको केवल 'do_makelist' (' buildin.c' में भी) को देखने की आवश्यकता हो सकती है और फिर आर कोड आपके डेटा में' data.frame 'टाइप करके लौटाया जा सकता है। कंसोल। बड़ी तस्वीर के लिए, आर मैनुअल अधिक सहायक हो सकते हैं: एक @ बेनबॉल्कर से जुड़ा हुआ है और ["आर-इंटर्नल्स"] (http://cran.r-project.org/doc/manuals/R-ints एचटीएमएल) मैनुअल। –

+0

@ जोशो'ब्रायन जो एक उत्तर होना चाहिए, एक टिप्पणी नहीं (अग्रिम में +1)। –

उत्तर

1

आर Internals से, 1.1 SEXPs:

... आर वस्तुओं अक्सर नोड्स कहा जाता है की बुनियादी निर्माण घटक ... नोड संरचना दोनों प्रकार के अपने पहले तीन क्षेत्रों एक 32-बिट spxinfo के रूप में है शीर्षलेख और फिर तीन पॉइंटर्स (गुणों और पिछले और अगले नोड को दोगुनी-लिंक्ड सूची में)

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

> a <- 4 
> a[1] 
4 

:: इस से स्पष्ट है builtin.cdo_makevector और do_makelist है, और array.cdo_matrix के लिए स्रोत है। इसके अलावा array.c में allocMatrix और memory.c के लिए स्रोत शामिल है allocVector के लिए स्रोत शामिल है।

जबकि मेरे सिर पर बहुत सी चीजें चल रही थीं, ऐसा लगता है कि एक मैट्रिक्स केवल दोगुनी-लिंक्ड सूचियों की दोगुनी-लिंक्ड सूची है। मुझे विश्वास है (हालांकि अनिश्चित है) कि पंक्ति और कॉलम नाम (जैसे डेटा फ्रेम में संग्रहीत) प्रत्येक सूची के 'गुण' में संग्रहीत हैं।

के जवाब "शक्तियों और कमजोरियों क्या" डेटा संरचनाओं को लागू करने की होगी कि (अपने सीमित ज्ञान से) दोगुना जुड़ा हुआ सूचियों है कि गतिशील स्मृति आवंटन में एक ताकत सरल है और आवश्यकता नहीं है एक संपूर्ण सरणी की प्रतिलिपि बनाने और पुन: आवंटित करने के ऊपरी हिस्से में, और कमजोरी यह है कि (सूची, कितने पॉइंटर्स सूची में हैं: सिर, पूंछ, मध्य, क्वार्टर इत्यादि) एक यादृच्छिक मूल्य v[99] तक पहुंचने से कई लोगों के माध्यम से पुनरावृत्ति का ओवरहेड ले सकता है वांछित से पहले तत्व पाए जाते हैं।

क्या यह सही है?

0

थोड़ा देर हो चुकी है, लेकिन दूसरे उत्तरों में से एक के साथ गलती को इंगित करना और एक स्पष्ट उत्तर देना चाहता था। आंतरिक मैनुअल को देखो:

https://cran.r-project.org/doc/manuals/R-ints.html#The-_0027data_0027

पढ़ें इस खंड की शुरुआत है, और 'INTSXP' के लिए प्रवेश। ऐसा लगता है कि पूर्णांक वैक्टर को सी int की सरणी के रूप में कार्यान्वित किया जाता है। इसी प्रकार 'REALSXP' और 'CHARSXP' के लिए।

इसे लिंक्ड सूचियों के रूप में कार्यान्वित करना निषिद्ध रूप से धीमा हो गया होगा।