बड़े आर कार्यक्रमों को कैसे व्यवस्थित करें?


161

जब मैं किसी जटिलता का R प्रोजेक्ट लेता हूं, तो मेरी स्क्रिप्ट जल्दी से लंबी और भ्रमित हो जाती है।

कुछ अभ्यास क्या हैं जिन्हें मैं अपना सकता हूं ताकि मेरा कोड हमेशा काम करने के लिए एक खुशी होगी? मैं जैसी चीजों के बारे में सोच रहा हूं

  • स्रोत फ़ाइलों में कार्यों का स्थान
  • जब किसी अन्य स्रोत फ़ाइल के लिए कुछ बाहर तोड़ने के लिए
  • मास्टर फ़ाइल में क्या होना चाहिए
  • संगठनात्मक इकाइयों के रूप में कार्यों का उपयोग करना (क्या यह सार्थक है कि आर वैश्विक राज्य तक पहुंचने के लिए कठिन बनाता है)
  • इंडेंटेशन / लाइन ब्रेक प्रैक्टिस।
    • इलाज (जैसे {?
    • चीजों को रखो)} 1 या 2 लाइनों पर?

मूल रूप से, बड़े आर स्क्रिप्ट के आयोजन के लिए आपके अंगूठे के नियम क्या हैं?


12
समुदाय विकी होना चाहिए
साइलेंटगॉस्ट

आप ProjectTemplateपैकेज को भी देखना चाह सकते हैं ।
ctbrown

जवाबों:


71

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

यह आपको देता है

  • विषय द्वारा अपने कोड को व्यवस्थित करने का एक अर्ध-स्वचालित तरीका
  • आपको मदद फ़ाइल लिखने के लिए प्रोत्साहित करता है, जिससे आप इंटरफ़ेस के बारे में सोचते हैं
  • के माध्यम से विवेक की एक बहुत जांच करता है R CMD check
  • प्रतिगमन परीक्षण जोड़ने का मौका
  • नाम स्थान के लिए एक साधन है।

बस source()कोड पर चल रहा है वास्तव में कम स्निपेट्स के लिए काम करता है। बाकी सब कुछ एक पैकेज में होना चाहिए - भले ही आप इसे प्रकाशित करने की योजना न करें क्योंकि आप आंतरिक रिपॉजिटरी के लिए आंतरिक पैकेज लिख सकते हैं।

'कैसे संपादित करें' भाग के रूप में, आर इंटर्नस मैनुअल में धारा 6 में उत्कृष्ट आर कोडिंग मानक हैं । अन्यथा, मैं एमएसीएस ईएसएस मोड में चूक का उपयोग करता हूं ।

अद्यतन 2008-अगस्त -13: डेविड स्मिथ ने Google आर स्टाइल गाइड के बारे में अभी - अभी ब्लॉग किया है ।


8
यदि आप अपने स्रोत-वृक्ष / विश्लेषण को "व्यवस्थित रूप से" बढ़ा रहे हैं, तो क्या आपको यह करना मुश्किल नहीं लगता है? यदि आपको अपने कोड में एक गलती दिखाई देती है (एक नई समस्या का पता लगाने के दौरान आम), तो आपको (i) फिक्स स्रोत; (ii) पैकेज को फिर से स्थापित करना; (iii) इसे अपने कार्यक्षेत्र में पुनः लोड करें? क्या पहले से लोड किए गए पैकेज (चरण iii से ऊपर) को पुनः लोड करने के लिए पुस्तकालय (...) को कॉल करने का एक तरीका है? क्या आपको अपने कार्यक्षेत्र को मारना नहीं है, आर को फिर से शुरू करें फिर अपने पुस्तकालय / पैकेज को पुनः लोड करें ताकि यह देख सकें कि क्या यह सही है?
स्टीव लियानोग्लू

1
आर कोडिंग शैली के लिए गुग्लिंग की कोशिश कर रहा है।
हैडली

3
@SteveLianoglou मुझे पता है कि यह काफी पुराना है, लेकिन हैडली का डेवल्स पैकेज आपके सभी कोड को पुनः लोड करना आसान बनाता है।
दासन

1
यह ब्लॉग पोस्ट नंगी हड्डियों का पहला पैकेज बनाने के लिए (मेरी राय) वास्तव में अच्छा त्वरित ट्यूटोरियल देता है: hilaryparker.com/2014/04/29/writing-an-r-package-from-scratch
panterasBox


51

मुझे उनकी खुद की फाइलों में अलग तरह की कार्यक्षमता डालना पसंद है।

लेकिन मुझे R का पैकेज सिस्टम पसंद नहीं है। इसका उपयोग करना कठिन है।

मैं एक पर्यावरण के अंदर फ़ाइल के कार्यों को रखने के लिए एक हल्का विकल्प पसंद करता हूं (जिसे हर दूसरी भाषा "नामस्थान" कहती है) और इसे संलग्न करें। उदाहरण के लिए, मैंने इस तरह के कार्यों का एक 'उपयोग' समूह बनाया:

util = new.env()

util$bgrep = function [...]

util$timeit = function [...]

while("util" %in% search())
  detach("util")
attach(util)

यह सब एक फ़ाइल उपयोग में है । जब आप इसे स्रोत करते हैं, तो आपको पर्यावरण का उपयोग मिलता है, इसलिए आप कॉल कर सकते हैं util$bgrep()और ऐसे; लेकिन इसके अलावा, attach()कॉल इसे सिर्फ bgrep()और सिर्फ ऐसे काम करता है। यदि आपने उन सभी कार्यों को अपने स्वयं के वातावरण में नहीं रखा है, तो वे दुभाषिया के शीर्ष-स्तरीय नाम स्थान (जो ls()दिखाता है) को प्रदूषित करेंगे ।

मैं पायथन की प्रणाली को अनुकरण करने की कोशिश कर रहा था, जहां हर फाइल एक मॉड्यूल है। यह बेहतर होगा, लेकिन यह ठीक लगता है।


धन्यवाद, ब्रेंडन। यह बहुत उपयोगी है। जबकि लूप के साथ क्या हो रहा है? अगर (("उपयोग"% खोज में%) ()) संलग्न (उपयोग)
दान गोल्डस्टीन

2
इसलिए यदि आप इसे और इस तरह से ट्विस्ट करना चाहते हैं तो आप बार-बार सोर्स ("यूज़। आर।") कर सकते हैं।
ब्रेंडन OConnor

आपको वास्तव में थोड़ी देर के लिए लूप की आवश्यकता नहीं है - आपको इसके लिए अलग से (उपयोग) की आवश्यकता है। मुझे याद नहीं है कि यह एक त्रुटि देता है या नहीं अगर यह पहले से लोड नहीं है, लेकिन यह सबसे सुरक्षित है और काम करता है। सुझावों का स्वागत है।
ब्रेंडन OConnor

1
फ़ंक्शंस-विशिष्ट वातावरण बनाना और इसे संलग्न करना मेरे लिए जाने का तरीका है। एक अन्य विधि एक अलग तरह से (अधिक प्रतिरूपकता के साथ) में एक ही बात को प्राप्त करने के उपयोग करने के लिए है sys.source: MyEnv <- attach(NULL, name=s_env); sys.source(file, MyEnv)। मैं यहां तक ​​कि एक समारोह में स्टार्ट-अप की घोषणा करता हूं, sys.source2जो एक ही नाम का एक वातावरण पहले से ही यहां है और एक नया बनाने के बजाय इसे खिलाता है। यह व्यक्तिगत कार्यों को त्वरित, आसान और थोड़े व्यवस्थित करने के लिए बनाता है :-)
एंटोनी लिजी

5
बस आज यह देखा और यह एक पैकेज विकल्प पर लागू होता है: github.com/klmr/modules
ctbrown

34

यह थोड़ा स्पष्ट लग सकता है, खासकर यदि आप एक प्रोग्रामर हैं, लेकिन यहाँ मैं कोड की तार्किक और भौतिक इकाइयों के बारे में कैसे सोचता हूँ।

मुझे नहीं पता कि यह आपका मामला है, लेकिन जब मैं आर में काम कर रहा हूं, तो मैं शायद ही कभी एक बड़े जटिल कार्यक्रम को ध्यान में रखकर शुरू करता हूं। मैं आमतौर पर एक स्क्रिप्ट में शुरू करता हूं और तार्किक रूप से अलग-अलग इकाइयों में अलग-अलग कोड, अक्सर फ़ंक्शन का उपयोग करता हूं। डेटा हेरफेर और विज़ुअलाइज़ेशन कोड को अपने स्वयं के कार्यों में रखा जाता है, आदि और ऐसे कार्यों को फ़ाइल के एक खंड में एक साथ समूहीकृत किया जाता है (शीर्ष पर डेटा हेरफेर, फिर विज़ुअलाइज़ेशन, आदि)। अंतत: आप यह सोचना चाहते हैं कि अपनी स्क्रिप्ट को बनाए रखना और दोष दर को कम करना आपके लिए कैसे आसान है।

आपके द्वारा किए गए कार्यों के लिए कितना अच्छा / मोटे अनाज है, यह अलग-अलग होगा और अंगूठे के विभिन्न नियम हैं: उदाहरण के लिए कोड की 15 लाइनें, या "एक कार्य को एक कार्य करने के लिए ज़िम्मेदार होना चाहिए जिसे उसके नाम से पहचाना जाता है", आदि आपका माइलेज अलग-अलग होगा। । चूंकि R कॉल-बाय-संदर्भ का समर्थन नहीं करता है, मैं आमतौर पर अपने कार्यों को ठीक से दानेदार बनाने के लिए भिन्न होता हूं जब इसमें डेटा फ़्रेम या इसी तरह की संरचनाएं शामिल होती हैं। लेकिन यह कुछ मूर्खतापूर्ण प्रदर्शन गलतियों के लिए overcompensation हो सकता है जब मैंने पहली बार R के साथ शुरुआत की थी।

तार्किक इकाइयों को अपनी भौतिक इकाइयों (जैसे स्रोत फाइलें और पैकेज जैसे बड़े समूह) में कब निकालना है? मेरे पास दो मामले हैं। सबसे पहले, अगर फ़ाइल बहुत बड़ी हो जाती है और तार्किक रूप से असंबंधित इकाइयों के बीच स्क्रॉल करना एक झुंझलाहट है। दूसरा, अगर मेरे पास ऐसे कार्य हैं जिन्हें अन्य कार्यक्रमों द्वारा पुन: उपयोग किया जा सकता है। मैं आमतौर पर कुछ समूहीकृत इकाई, डेटा हेरफेर कार्यों को एक अलग फ़ाइल में रखकर शुरू करता हूं। मैं फिर किसी अन्य स्क्रिप्ट से इस फ़ाइल को स्रोत कर सकता हूं।

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

अंत में, मुझे लगता है कि आपका प्रश्न आर के लिए विशेष रूप से आवश्यक नहीं है। मैं वास्तव में स्टीव मैककोनेल द्वारा कोड पूरा पढ़ने की सिफारिश करूंगा जिसमें इस तरह के मुद्दों और बड़े पैमाने पर कोडिंग प्रथाओं के बारे में बहुत अधिक ज्ञान है।


3
बहुत ही उपयोगी टिप्पणी, ars, धन्यवाद। मैं एक प्रोग्रामर हूं, लेकिन दूसरों के साथ जांच करना अच्छा है। जब आप कहते हैं "चूंकि आर कॉल-बाय-रेफरेंस का समर्थन नहीं करता है, तो मैं आमतौर पर अपने कार्यों को बहुत अच्छा बनाने के लिए सावधान हूं", मैं आपको सुनता हूं। मुझे रीडडाटा () जैसे लेखन कार्य करने की आदत है; CleanData (); डेटा का विश्लेषण(); GraphData (); और आर उस बोझिल बनाता है। मैं इस विचार के प्रति जाग रहा हूं कि मुझे "स्रोत" का उपयोग करने की आवश्यकता है जिस तरह से मैं अन्य भाषाओं में फ़ंक्शन का उपयोग करता हूं।
डेन गोल्डस्टीन

2
तुम सही हो, डैन। मैं खुद को "स्रोत" का उपयोग कर पाता हूं जो कि डेटासेट तैयार करने के कार्यों के लिए है, इसलिए मैं बस तैयार डेटा का उपयोग कर सकता हूं। अन्य स्क्रिप्ट में जहां वास्तविक विश्लेषण किया गया है। मुझे यकीन नहीं था कि यह अच्छा अभ्यास था क्योंकि यह सिर्फ अन्य भाषाओं के सापेक्ष अजीब लगता है - वास्तव में शेल स्क्रिप्टिंग की तरह। नोटों की तुलना करना अच्छा है। :)
आर्स

अच्छा जवाब और टिप्पणी। मुझे लगता है कि यह विशेष रूप से आर में कष्टप्रद है, क्योंकि आप अक्सर एक विशेष प्रारूप में डेटा के साथ काम कर रहे हैं, जिसके लिए पुन: प्रयोज्य कार्यों को लिखना वास्तव में कठिन है। तो क्या आप अच्छा कार्यात्मक कोड लिखते हैं, भले ही आप जानते हैं कि इसका कभी भी उपयोग नहीं किया जाएगा, या क्या आप सिर्फ त्वरित और गंदा प्रक्रियात्मक कोड लिखते हैं ताकि बड़ी वस्तुओं के साथ उस छोटी सी अतिरिक्त दक्षता प्राप्त हो सके? एक दुविधा का सा .. आर कॉल-बाय-संदर्भ के साथ बिल्कुल भयानक होगा ..
n

खैर, यह किया जा सकता है, की तरह , लेकिन कोई दक्षता हासिल नहीं है ...
n

19

मैं डिर्क सलाह से सहमत हूं! IMHO, आपके प्रोग्राम को सरल स्क्रिप्ट से प्रलेखित पैकेज में व्यवस्थित करता है, R में प्रोग्रामिंग के लिए, जैसे वर्ड से TeX / LaTeX पर लिखने के लिए स्विच करना। मैं बहुत उपयोगी बनाना आर पैकेजों पर एक नज़र डालने की सलाह देता हूं : फ्रेडरिक लेइस्क द्वारा एक ट्यूटोरियल


6
पैकेज सम्मोहक लगते हैं। हालांकि, मुझे चिंता थी कि वे ओवरकिल हो सकते हैं। मैं सामान्य-उद्देश्य कोड नहीं लिख रहा हूँ। जो मैं कर रहा हूं, उसमें से अधिकांश इस परिकल्पना का परीक्षण है, परिकल्पना का परीक्षण करें, इसे प्लॉट करें, प्लॉट मापदंडों को समायोजित करें, प्लॉट करें, जो डेटा को फिर से आकार दें, प्लॉट करें। मैं ऐसा सामान कर रहा हूं, जो एक बार खत्म हो गया, तो शायद फिर कभी नहीं होगा।
डेन गोल्डस्टीन

1
उस स्थिति में आपको स्वेव पर एक नजर डालनी चाहिए। यह LaTeX के साथ R कोड को जोड़ती है। इसलिए आपके पास विश्लेषण और रिपोर्ट स्रोत एक साथ हैं।
थियरी

15

मेरा संक्षिप्त जवाब:

  1. अपने कार्यों को सावधानीपूर्वक लिखें, सामान्य पर्याप्त आउटपुट और इनपुट की पहचान करना;
  2. वैश्विक चर के उपयोग को सीमित करें;
  3. S3 ऑब्जेक्ट्स का उपयोग करें और, जहाँ उपयुक्त हो, S4 ऑब्जेक्ट्स;
  4. फ़ंक्शंस को पैकेज में रखें, ख़ासकर तब जब आपके फ़ंक्शंस C / Fortran कह रहे हों।

मेरा मानना ​​है कि आर उत्पादन में अधिक से अधिक उपयोग किया जाता है, इसलिए पुन: प्रयोज्य कोड की आवश्यकता पहले की तुलना में अधिक है। मुझे लगता है कि दुभाषिया पहले से कहीं ज्यादा मजबूत है। इसमें कोई संदेह नहीं है कि R, C की तुलना में 100-300x धीमा है, लेकिन आमतौर पर अड़चन कोड की कुछ पंक्तियों के आसपास केंद्रित होती है, जिसे C / C ++ में प्रत्यायोजित किया जा सकता है। मुझे लगता है कि डेटा हेरफेर और सांख्यिकीय विश्लेषण में आर की ताकत को किसी अन्य भाषा में सौंपना एक गलती होगी। इन उदाहरणों में, प्रदर्शन का दंड कम है, और किसी भी मामले में विकास के प्रयास में बचत के लायक है। अगर अकेले निष्पादन का समय होता है, तो हम सभी कोडांतरक लिखेंगे।


11

मुझे यह पता लगाना है कि पैकेज कैसे लिखना है लेकिन समय का निवेश नहीं किया है। अपने प्रत्येक मिनी-प्रोजेक्ट के लिए मैं अपने सभी निम्न-स्तरीय कार्यों को 'फ़ंक्शन /' नामक फ़ोल्डर में रखता हूं, और उन्हें एक अलग नामस्थान में स्रोत करता हूं जिसे मैं स्पष्ट रूप से बनाता हूं।

कोड की निम्नलिखित पंक्तियाँ खोज पथ पर "myfuncs" नामक वातावरण बनाएंगी यदि यह पहले से मौजूद नहीं है (अटैचमेंट का उपयोग कर रहा है), और इसे .r फ़ाइलों में मेरे 'फ़ंक्शन /' डायरेक्टरी में उपयोग किए गए फ़ंक्शन के साथ पॉप्युलेट करें (उपयोग करके) sys.source)। मैं आमतौर पर इन पंक्तियों को अपने मुख्य स्क्रिप्ट के शीर्ष पर रखता हूं जो "उपयोगकर्ता इंटरफ़ेस" के लिए होता है जिसमें से उच्च-स्तरीय फ़ंक्शंस (निम्न-स्तरीय फ़ंक्शंस को शामिल करना) कहा जाता है।

if( length(grep("^myfuncs$",search()))==0 )
  attach("myfuncs",pos=2)
for( f in list.files("functions","\\.r$",full=TRUE) )
  sys.source(f,pos.to.env(grep("^myfuncs$",search())))

जब आप परिवर्तन करते हैं तो आप हमेशा उसी लाइनों के साथ इसे फिर से स्रोत बना सकते हैं, या जैसे कुछ का उपयोग कर सकते हैं

evalq(f <- function(x) x * 2, pos.to.env(grep("^myfuncs$",search())))

आपके द्वारा बनाए गए वातावरण में परिवर्धन / संशोधनों का मूल्यांकन करने के लिए।

यह मुझे पता है कि kludgey है, लेकिन इसके बारे में बहुत औपचारिक होने से बचा जाता है (लेकिन अगर आपको मौका मिले तो मैं पैकेज सिस्टम को प्रोत्साहित करूंगा - उम्मीद है कि मैं भविष्य में इस तरह से पलायन करूंगा)।

सम्मेलनों के कोडिंग के लिए, यह केवल सौंदर्यशास्त्र के बारे में मैंने देखा है (मुझे पसंद है और शिथिल अनुसरण करता है लेकिन मैं आर में बहुत अधिक घुंघराले ब्रेसिज़ का उपयोग नहीं करता हूं):

http://www1.maths.lth.se/help/R/RCC/

[], ड्रॉप = FALSE] और <के उपयोग के संबंध में अन्य "कन्वेंशन" हैं - जैसा कि असाइनमेंट ऑपरेटर ने उपयोग में विभिन्न प्रस्तुतियों (आमतौर पर मुख्य) में सुझाया है! सम्मेलनों, लेकिन मुझे नहीं लगता कि इनमें से कोई भी सख्त हैं (हालांकि [, ड्रॉप = FALSE] उन कार्यक्रमों के लिए उपयोगी है जिनमें आप उस इनपुट के बारे में सुनिश्चित नहीं हैं जो आप उम्मीद करते हैं)।


6

मुझे पैकेज के पक्ष में एक और व्यक्ति के रूप में गिनें। मैं मैन पेज और विग्नेट लिखने पर बहुत गरीब होने का स्वीकार करता हूं जब तक कि मुझे / जब मुझे (यानी जारी किया जा रहा है), लेकिन यह स्रोत डो को बंडल करने के लिए एक वास्तविक आसान तरीका बनाता है। इसके अलावा, यदि आप अपने कोड को बनाए रखने के बारे में गंभीर हो जाते हैं, तो डर्क जो अंक लाता है वह सब पिल्ले में आता है।


4

मैं भी सहमत हूं। आरंभ करने के लिए package.skeleton () फ़ंक्शन का उपयोग करें। यहां तक ​​कि अगर आपको लगता है कि आपका कोड फिर कभी नहीं चलाया जा सकता है, तो यह आपको अधिक सामान्य कोड बनाने के लिए प्रेरित करने में मदद कर सकता है जो आपको बाद में बचा सकता है।

वैश्विक परिवेश तक पहुँचने के लिए, यह << - ऑपरेटर के साथ आसान है, हालांकि यह हतोत्साहित किया जाता है।


3

अभी तक पैकेज लिखना नहीं सीखा, मैंने हमेशा सब स्क्रिप्ट्स को सोर्स करके व्यवस्थित किया है। लेखन वर्गों के समान है लेकिन शामिल नहीं है। यह प्रोग्रामेटिक रूप से सुरुचिपूर्ण नहीं है, लेकिन मुझे लगता है कि मैं समय के साथ विश्लेषण का निर्माण करता हूं। एक बार मेरे पास एक बड़ा खंड है जो काम करता है मैं इसे अक्सर एक अलग स्क्रिप्ट पर ले जाता हूं और इसे स्रोत करता हूं क्योंकि यह कार्यक्षेत्र वस्तुओं का उपयोग करेगा। शायद मुझे कई स्रोतों से डेटा आयात करने की आवश्यकता है, उन सभी को सॉर्ट करें और चौराहों को ढूंढें। मैं उस खंड को एक अतिरिक्त स्क्रिप्ट में रख सकता हूं। हालांकि, यदि आप अन्य लोगों के लिए अपना "एप्लिकेशन" वितरित करना चाहते हैं, या यह कुछ इंटरेक्टिव इनपुट का उपयोग करता है, तो पैकेज संभवतः एक अच्छा मार्ग है। एक शोधकर्ता के रूप में मुझे शायद ही कभी अपने विश्लेषण कोड को वितरित करने की आवश्यकता होती है, लेकिन मुझे इसे बढ़ाने या ट्विस्ट करने की आवश्यकता है।


मैंने इस पद्धति का उपयोग किया है लेकिन यह महसूस किया है कि फ़ंक्शन और पैकेज स्रोत ("next_script.R") से बेहतर हैं। मैंने इसके बारे में यहाँ लिखा है: stackoverflow.com/questions/25273166/…
आर्थर यिप

1

मैं एक आर बड़े प्रोजेक्ट को एक साथ रखने के लिए सही वर्कफ़्लो के पवित्र ग्रिल को भी खोज रहा हूं। मैंने पिछले साल इस पैकेज को रस्सिट कहा था , और निश्चित रूप से, यह वही था जो मैं देख रहा था। यह आर पैकेज स्पष्ट रूप से बड़ी आर परियोजनाओं की तैनाती के लिए विकसित किया गया था, लेकिन मैंने पाया कि इसका उपयोग छोटे, मध्यम आकार और बड़े आकार की परियोजनाओं के लिए किया जा सकता है। मैं एक मिनट (नीचे) में वास्तविक दुनिया के उदाहरणों के लिंक दूंगा, लेकिन पहले मैं आर परियोजनाओं के निर्माण के नए प्रतिमान के साथ समझाना चाहता हूं rsuite

ध्यान दें। मैं निर्माता या डेवलपर नहीं हूं rsuite

  1. हम RStudio के साथ सभी गलत काम कर रहे हैं; लक्ष्य किसी परियोजना या पैकेज का निर्माण नहीं होना चाहिए बल्कि एक बड़े दायरे का होना चाहिए। Rsuite में आप एक सुपर-प्रोजेक्ट या मास्टर प्रोजेक्ट बनाते हैं, जो सभी संयोजनों में संभव मानक आर प्रोजेक्ट्स और आर पैकेज रखता है।

  2. R सुपर-प्रोजेक्ट होने से आपको makeR प्रोजेक्ट के निचले स्तरों के प्रबंधन के लिए Unix की आवश्यकता नहीं है; आप शीर्ष पर R लिपियों का उपयोग करते हैं। चलो मैं तुम्हें दिखाता हूँ। जब आप एक रस्सिट मास्टर प्रोजेक्ट बनाते हैं, तो आपको यह फ़ोल्डर संरचना मिलती है:

यहां छवि विवरण दर्ज करें

  1. फ़ोल्डर Rवह है जहाँ आप अपनी परियोजना प्रबंधन स्क्रिप्ट डालते हैं, जो बदल देंगे make

  2. फ़ोल्डर packagesवह फ़ोल्डर होता है, जिसमें rsuiteसुपर-प्रोजेक्ट की रचना करने वाले सभी पैकेज होते हैं। आप एक पैकेज को कॉपी भी कर सकते हैं जो इंटरनेट से सुलभ नहीं है, और रस्सिट इसे भी बनाएंगे।

  3. फ़ोल्डर deploymentवह जगह है जहां rsuiteसभी पैकेज बायनेरिज़ लिखे जाएंगे जो पैकेज DESCRIPTIONफ़ाइलों में इंगित किए गए थे । तो, यह बनाता है, अपने आप से, आप पूरी तरह से प्रतिलिपि प्रस्तुत करने योग्य accros समय परियोजना।

  4. rsuiteसभी ऑपरेटिंग सिस्टम के लिए क्लाइंट के साथ आता है। मैंने उन सभी का परीक्षण किया है। लेकिन आप इसे addinRStudio के लिए भी इंस्टॉल कर सकते हैं ।

  5. rsuiteआपको condaअपने स्वयं के फ़ोल्डर में एक अलग स्थापना बनाने देता है conda। यह एक वातावरण नहीं है, बल्कि आपकी मशीन में एनाकोंडा से प्राप्त एक भौतिक पायथन इंस्टॉलेशन है। यह आर के साथ मिलकर काम करता है SystemRequirements, जिसमें से आप अपने इच्छित सभी पायथन पैकेज स्थापित कर सकते हैं, जो आप चाहते हैं कि किसी भी कोंडा चैनल से।

  6. जब आप ऑफ़लाइन होते हैं, तो आप R पैकेज खींचने के लिए स्थानीय रिपॉजिटरी बना सकते हैं या पूरी चीज़ को तेज़ी से बनाना चाहते हैं।

  7. यदि आप चाहें, तो आप आर प्रोजेक्ट को ज़िप फ़ाइल के रूप में भी बना सकते हैं और इसे सहकर्मियों के साथ साझा कर सकते हैं। यह चलेगा, बशर्ते आपके सहकर्मियों के पास समान आर संस्करण स्थापित हो।

  8. एक अन्य विकल्प उबंटू, डेबियन या सेंटोस में पूरे प्रोजेक्ट के एक कंटेनर का निर्माण कर रहा है। इसलिए, अपने प्रोजेक्ट बिल्ड के साथ ज़िप फ़ाइल साझा करने के बजाय, आप पूरे Dockerकंटेनर को अपने प्रोजेक्ट के साथ साझा करने के लिए तैयार हैं।

मैं rsuiteपूर्ण पुनरुत्पादकता की तलाश में बहुत कुछ प्रयोग कर रहा हूं , और उन पैकेजों से बचें जो वैश्विक वातावरण में स्थापित होते हैं। यह गलत है क्योंकि जैसे ही आप एक पैकेज अपडेट स्थापित करते हैं, प्रोजेक्ट, अधिक बार नहीं, काम करना बंद कर देता है, विशेष रूप से उन पैकेजों के लिए जो कुछ मापदंडों के साथ फ़ंक्शन के लिए बहुत विशिष्ट कॉल करते हैं।

पहली चीज जो मैंने प्रयोग करनी शुरू की, वह bookdownई-बुक्स के साथ थी । मैं कभी भाग्यशाली नहीं रहा कि छह महीने से अधिक समय की परीक्षा में जीवित रहने के लिए किताबों की अलमारी हो। इसलिए, मैंने जो भी किया वह मूल बुकडाउन परियोजना को rsuiteरूपरेखा का पालन करने के लिए परिवर्तित कर रहा है । अब, मुझे अपने वैश्विक आर पर्यावरण को अपडेट करने के बारे में चिंता करने की ज़रूरत नहीं है, क्योंकि परियोजना के deploymentफ़ोल्डर में पैकेज का अपना सेट है ।

अगली चीज़ जो मैंने की, वह थी मशीन लर्निंग प्रोजेक्ट्स बनाना लेकिन rsuiteरास्ते में। एक मास्टर, शीर्ष पर ऑर्केस्ट्रेटिंग परियोजना, और सभी उप-परियोजनाएं और पैकेज मास्टर के नियंत्रण में होना चाहिए। यह वास्तव में आर के साथ आपके कोड को बदल देता है, जिससे आप अधिक उत्पादक बन जाते हैं।

उसके बाद मैंने अपने नाम के एक नए पैकेज में काम करना शुरू किया rTorch। यह संभव था, बड़े हिस्से में, क्योंकि rsuite; यह आपको सोचने और बड़ा होने देता है।

हालांकि सलाह का एक टुकड़ा। सीखना rsuiteआसान नहीं है। क्योंकि यह आर परियोजनाओं को बनाने का एक नया तरीका प्रस्तुत करता है, यह कठिन लगता है। पहले प्रयासों में निराश न हों, ढलान पर चढ़ना जारी रखें जब तक आप इसे नहीं बनाते। इसके लिए आपके ऑपरेटिंग सिस्टम और आपके फाइल सिस्टम के उन्नत ज्ञान की आवश्यकता होती है।

मुझे उम्मीद है कि एक दिन RStudioहमें ऑर्केस्ट्रेटिंग प्रोजेक्ट्स बनाने की अनुमति मिलती है जैसे rsuiteमेनू से। यह अद्भुत होगा।

लिंक:

RSuite GitHUb रेपो

r4ds बुकडाउन

केरस और चमकदार ट्यूटोरियल

moderndive पुस्तक-rsuite

interpretable_ml-rsuite

IntroMachineLearningWithR-rsuite

क्लार्क-intro_ml-rsuite

hyndman-bookdown-rsuite

statistical_rethinking-rsuite

fread-मानक-rsuite

DATAVIZ-rsuite

खुदरा-विभाजन-एच 2 ओ-ट्यूटोरियल

टेल्को-ग्राहक-मंथन-ट्यूटोरियल

sclerotinia_rsuite


-7

इंटरएक्टिव उपयोग और छोटी स्क्रिप्ट के लिए आर ठीक है, लेकिन मैं इसे बड़े कार्यक्रम के लिए उपयोग नहीं करूंगा। मैं अधिकांश प्रोग्रामिंग के लिए एक मुख्यधारा की भाषा का उपयोग करता हूं और इसे आर इंटरफेस में लपेटता हूं।


1
वहाँ गंभीरता से बड़े पैकेज (यानी प्रोग्राम) हैं। क्या आप गंभीरता से सुझाव दे रहे हैं कि उन्हें किसी अन्य भाषा में फिर से लिखा जाना चाहिए? क्यों???
एडुआर्डो लियोनी

4
एक विचार दक्षता है। मैंने अक्सर R कोड को C ++ कोड के रूप में फिर से लिखा है और इसे 100x तेज बना दिया है। एक और उपकरण का समर्थन है। R के पास ग्रहण या विज़ुअल स्टूडियो जैसे IDE की तुलना में कुछ भी नहीं है। अंत में, यदि कोई कार्यक्रम बहुत बड़ा है, तो यह गैर-सांख्यिकीय कार्यों को करने की संभावना है जो आर के अनुकूल नहीं है।
जॉन डी। कुक

2
एक प्लगइन (स्टेट-ईटी) उपलब्ध है जो ग्रहण को आर के साथ बातचीत करने की अनुमति देता है। मैं सहमत हूं कि सी ++ आर की तुलना में बहुत तेजी से काम कर सकता है। लेकिन आर सामान को सी ++ में फिर से तैयार करने के लिए आपको कितना समय चाहिए? जब तक आप बार-बार कोड का पुन: उपयोग नहीं कर सकते, तब तक तेज कोड का लाभ C ++ में इसे पुनः प्राप्त करने के प्रयास की तुलना में बहुत अधिक नहीं है।
थियरी

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

RcppR प्रोग्राम में C ++ कोड सहित पैकेज का उपयोग करना काफी सीधा हो जाता है। तो आर कोड के कुछ भागों को फिर से लिखना आर को काफी आसानी से एकीकृत किया जा सकता है। इसके अलावा, RStudio के आगमन ने R के लिए एक IDE पेश किया है, जो शायद अभी तक विज़ुअल स्टूडियो जितना शक्तिशाली नहीं है।
पॉल हेमस्ट्रा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.