R में नामकरण चर के लिए आपकी पसंदीदा शैली क्या है? [बन्द है]


110

वैरिएबल और फ़ंक्शंस के नामकरण के लिए कौन से सम्मेलन आर कोड के पक्ष में हैं?

जहां तक ​​मैं बता सकता हूं, कई अलग-अलग सम्मेलन हैं, जिनमें से सभी कैकोफ़ोनस सद्भाव में सह-अस्तित्व हैं:

1. अवधि विभाजक का उपयोग, उदाहरण के लिए

  stock.prices <- c(12.01, 10.12)
  col.names    <- c('symbol','price')

पेशेवरों: आर समुदाय में ऐतिहासिक मिसाल है, आर कोर में प्रचलित है, और Google के आर स्टाइल गाइड द्वारा अनुशंसित है ।

विपक्ष: ऑब्जेक्ट-ओरिएंटेड कॉनोटेशन्स के साथ व्याप्त, और आर न्यूबीक को भ्रमित करना

2. अंडरस्कोर का उपयोग

  stock_prices <- c(12.01, 10.12)
  col_names    <- c('symbol','price')

पेशेवरों: कई प्रोग्रामिंग लैंग में एक आम सम्मेलन; हैडली विकम के स्टाइल गाइड द्वारा इष्ट , और ggplot2 और plyr संकुल में उपयोग किया गया।

विपक्ष: ऐतिहासिक रूप से आर प्रोग्रामर द्वारा उपयोग नहीं किया गया; Emacs-Speaks-Communications ('Ess-toggle-underscore' के साथ परिवर्तनीय) में '<-' ऑपरेटर को नाराज़ किया जाता है।

3. मिश्रित पूंजीकरण का उपयोग (कैमसेल कैस)

  stockPrices <- c(12.01, 10.12)
  colNames    <- c('symbol','price')

पेशेवरों: कई भाषा समुदायों में व्यापक अपनाने की अपील की गई।

विपक्ष: हाल ही में मिसाल है, लेकिन ऐतिहासिक रूप से इस्तेमाल नहीं किया गया है (या तो आर आधार या इसके प्रलेखन में)।

अंत में, जैसे कि यह पर्याप्त रूप से भ्रमित नहीं कर रहा था, मुझे यह इंगित करना चाहिए कि Google स्टाइल गाइड चर के लिए डॉट नोटेशन के लिए तर्क देता है, लेकिन कार्यों के लिए मिश्रित पूंजीकरण।

आर संकुल में सुसंगत शैली की कमी कई स्तरों पर समस्याग्रस्त है। डेवलपर के दृष्टिकोण से, यह दूसरे के कोड को बनाए रखना और विस्तारित करना कठिन बना देता है (esp। जहाँ इसकी शैली आपके खुद के साथ असंगत है)। R उपयोगकर्ता के दृष्टिकोण से, असंगत सिंटैक्स R के सीखने की अवस्था को बढ़ाता है, एक अवधारणा को व्यक्त करने के तरीकों को गुणा करके (जैसे कि दिनांक कास्टिंग फ़ंक्शन asDate) (), as.date (), या as_date ()? नहीं, यह जैसा है। तारीख())।


1
वहाँ भी MATLAB शैली के उदाहरण हैं alllowercaseचर नाम, और सीधे-से-समीकरण बहुत ही कम नामों में से बहुत सारे ( x, y, आदि)।
रिची कॉटन

5
अंडरस्कोर अजगर की तरह हैं, इसलिए मैं अंडरस्कोर का उपयोग करता हूं। ईएसएस को तय किया जाना चाहिए, यह वास्तव में मूर्खतापूर्ण है।
ब्रेंडन OConnor 1

7
ठीक करने के लिए कुछ भी नहीं है, इसके लिए एक टॉगल है। लेकिन डिफ़ॉल्ट व्यवहार के लिए एक शॉर्टकट के रूप में एक अंडरस्कोर की व्याख्या करना है - आपको प्रेस करने के लिए एक कुंजी को सहेजना। इसलिए यदि आप अंडरस्कोर (हाय, हेडली) के साथ चर प्रकाशित करते हैं, तो आप प्रत्येक ईएसएस उपयोगकर्ता को मूल व्यवहार को प्राप्त करने के लिए दो बार _ दबाने के लिए मजबूर करते हैं - या अपने ईएसएस सेटअप को अनुकूलित करने के लिए। मैं अभी भी एक नए समुद्री मील से ऊंट पसंद करते हैं।
डिर्क एडल्डबुलेटेल

2
CamelCase में भी समस्याएं हैं, उदाहरण के लिए मानक ऊंट प्रकरण ImfDataTransformedया प्राकृतिक विस्तारित संस्करण IMFDataTransformedमेरे पसंदीदा TOGGLEcamelCase के रूप में पढ़ना उतना आसान नहीं है: IMFdataTransformed...
PatrickT

1
मैं इस प्रश्न को ऑफ-टॉपिक के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि उत्तर राय-आधारित होने के लिए बाध्य हैं।
बेन बोल्कर

जवाबों:


81

पिछले पिछले जवाब तो बस थोड़ा सा यहाँ जोड़ने के लिए:

  • अंडरस्कोर वास्तव में ईएसएस उपयोगकर्ताओं के लिए कष्टप्रद है; यह देखते हुए कि ईएसएस बहुत व्यापक रूप से उपयोग किया जाता है, आपको ईएसएस उपयोगकर्ताओं द्वारा लिखे गए कोड में कई अंडरस्कोर नहीं दिखाई देंगे (और उस सेट में आर कोर का एक गुच्छा और साथ ही सीआरएएन लेखक भी शामिल हैं, हेडली के बावजूद उत्तेजना);

  • डॉट्स बुराई भी हैं क्योंकि वे साधारण विधि प्रेषण में मिल सकते हैं; मेरा मानना ​​है कि मैं एक बार आर सूची में इस आशय की टिप्पणियों को पढ़ता हूं: डॉट्स एक ऐतिहासिक कलाकृति हैं और अब इसे प्रोत्साहित नहीं किया गया है;

  • इसलिए हमारे पास एक स्पष्ट विजेता अभी भी अंतिम दौर में खड़ा है: camelCase। मुझे यकीन नहीं है कि क्या मैं वास्तव में 'आर समुदाय में कमी के अभाव' के दावे से सहमत हूं।

और हाँ: व्यावहारिकता और संगति ट्रम्प हठधर्मिता। तो जो भी काम करता है और सहकर्मियों और सह-लेखकों द्वारा उपयोग किया जाता है। आखिरकार, हमारे पास अभी भी बहस करने के लिए सफेद-जगह और ब्रेस हैं :)


6
+1 खैर ने कहा! [यदि केवल कोर टीम एक निश्चित शैली मार्गदर्शिका डालती है; मुझे ऐसा लगता है कि इससे उनके पहले से निहित उपयोग पर अधिक विश्वास हो जाएगा।]
शेन

1
मैं मिश्रित मामले के प्रति अपने पूर्वाग्रह के आधार पर सिर्फ गलतफहमी हो सकती है, लेकिन मेरा मानना ​​है कि आरजी हमेशा इस्तेमाल करते थे जब मैं उनके लिए काम कर रहा था। मुझे पता है कि आरजी के लिए क्या अच्छा है मेरे लिए अच्छा है!
जियोफॉजेंट्री

ज्योफ: :) जाने के लिए एक बुरा नियम नहीं है
डर्क एडडेलबेटेल

2
अंगूठे-अप के लिए धन्यवाद। 'कैनोनिकल स्टाइल डॉक्यूमेंट' के लिए: चाहने से ऐसा नहीं होता, या मैं गुलाबी टट्टू की सवारी कर रहा होता। हो सकता है कि आप कुछ लिखकर शुरू कर सकते हैं, जिसे आप आर विकी पर चिपका सकते हैं और हम सभी इसे संपादित करते हैं, अपनाते हैं और अपनाते हैं। आशा है कि शाश्वत स्प्रिंग्स, जैसा कि वे कहते हैं ...
डिर्क एडल्डबुलेटेल

1
@ डर्क - मैं आपकी सिफारिश के आधार पर ऊंट आवरण की ओर बढ़ना शुरू करने की योजना बना रहा हूं, लेकिन मैं उत्सुक हूं कि क्या आप जानते हैं कि ?make.namesऐसा क्यों प्रतीत होता है कि डॉट से अलग नामों को प्राथमिकता दी जाती है?
डेविड लेबॉउर

73

मैंने एक नामकरण सम्मेलनों का उपयोग किया जो वास्तव में CRAN पर उपयोग किए जाते हैं जो R जर्नल के लिए स्वीकार किए जाते हैं :) यहां परिणामों को सारांशित करने वाला एक ग्राफ है:

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

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

पुरा कागज यहां है:

http://journal.r-project.org/archive/2012-2/RJournal_2012-2_Baaaath.pdf


2
कैसे प्रतिशत 100% तक नहीं आते हैं?
e9t

10
@ e9t क्योंकि एक नाम कई नामकरण संयोगों से मेल खा सकता है। printअपरकंपेल और .OTHER_style को छोड़कर सभी सम्मेलनों से मेल खाता है।
रासमस बैस्ट

इस पेपर को अपडेट करना अच्छा रहेगा।
शमूएल-रोजा

34

हर तरह से अंडरस्कोर! लोकप्रिय राय के विपरीत, बेस आर में कई फ़ंक्शन हैं जो अंडरस्कोर का उपयोग करते हैं। grep("^[^\\.]*$", apropos("_"), value = T)उन सभी को देखने के लिए भागो ।

मैं कोडिंग की आधिकारिक हेडली शैली का उपयोग करता हूं ;)


1
काफी अच्छा है! मैं पहले एप्रोपोस फ़ंक्शन के बारे में नहीं जानता था । यह आर 2.9.0 में मेरे लिए 10 कार्य लौटाता है; मैं शायद ही कहूंगा कि यह सम्मोहक मामला है। जब वे स्पष्ट रूप से R के लिए अल्पमत में हों तो अंडरस्कोर के लिए आपका औचित्य क्या है?
शेन

3
खैर यह आर 2.10.0 में 16 है, इसलिए यह प्रति संस्करण 60% की वृद्धि है;) मैं मुख्य रूप से उन्हें पसंद करता हूं क्योंकि वे मुझे रूबी की याद दिलाते हैं; camelCase मुझे जावा की याद दिलाता है।
हैडले 17

6
हेडली, मेरा दिल आपके अंडरस्कोर विद्रोह का समर्थन करने के लिए कहता है, लेकिन मेरा सिर समुदाय के मानक का सम्मान करने के लिए कहता है, और ऊंट कैसैस के लिए हाँ कहता है। :( लेकिन शायद आत्म-संगति वह सब मायने रखती है।
मध्यरात्रि

5

मुझे ऊंटनी पसंद है जब ऊंट वास्तव में कुछ सार्थक प्रदान करता है - जैसे डेटाटाइप।

dfProfitLoss, जहां df = डेटाफ्रेम

या

vdfMergedFiles (), जहां फ़ंक्शन वेक्टर में होता है और एक डेटाफ्रेम को बाहर निकालता है

जबकि मुझे लगता है कि _ वास्तव में पठनीयता में जोड़ता है, वहाँ सिर्फ नाम के साथ-_ या अन्य वर्णों के उपयोग के साथ बहुत अधिक समस्याएँ हैं। खासकर यदि आप कई भाषाओं में काम करते हैं।


3

यह व्यक्तिगत प्राथमिकता पर आता है, लेकिन मैं Google शैली गाइड का पालन करता हूं क्योंकि यह कोर टीम की शैली के अनुरूप है। मैं अभी तक बेस आर में एक चर में एक अंडरस्कोर नहीं देख सकता हूं।


3

जैसा कि मैं यहाँ इंगित करता हूं:

पहचानकर्ताओं की क्रियाशीलता एक प्रोग्रामर के प्रदर्शन को कैसे प्रभावित करती है?

यह ध्यान में रखने योग्य है कि आपके परिवर्तनशील नाम आपके सह-कर्मचारियों / उपयोगकर्ताओं के लिए कैसे समझ में आते हैं यदि वे गैर-देशी वक्ता हैं ...

इस कारण से मैं कहूंगा कि अंडरस्कोर और अवधि पूंजीकरण से बेहतर हैं, लेकिन जैसा कि आप बताते हैं कि आपकी स्क्रिप्ट के भीतर निरंतरता आवश्यक है।


2

जैसा कि दूसरों ने उल्लेख किया है, अंडरस्कोर बहुत सारे लोगों को परेशान करेगा। नहीं, यह मौखिक नहीं है, लेकिन यह विशेष रूप से आम नहीं है।

एक विभाजक के रूप में डॉट्स का उपयोग करना S3 वर्गों और पसंद के साथ थोड़ा बालों वाला हो जाता है।

मेरे अनुभव में, ऐसा लगता है कि आर के कई उच्च muckity mucks ऊंट के उपयोग को पसंद करते हैं, कुछ डॉट उपयोग के साथ और अंडरस्कोर के एक smattering।


1

आमतौर पर मैं अंडरस्कोर और एक मिश्रित कैपिटलाइज़ेशन (कैमसेल कै) का उपयोग करके अपने चर का नाम बदल देता हूं। सरल चर अंडरस्कोर का नामकरण कर रहे हैं, उदाहरण:

PSOE_votes -> PSOE (स्पेन का राजनीतिक समूह) के लिए वोटों की संख्या।

PSOE_states -> श्रेणीबद्ध, उस स्थिति को इंगित करता है जहां PSOE जीतता है {आरागॉन, आंदालुसिया, ...)

PSOE_political_force -> श्रेणीबद्ध, PSOE के राजनीतिक समूहों के बीच स्थिति को इंगित करता है {पहला, दूसरा, तीसरा)

PSOE_07 -> 2007 में PSOE_votes + PSOE_states + PSOE_political_force का संघ (h eader -> वोट, राज्य, स्थिति )

यदि मेरा चर एक मिश्रित पूंजीकरण का उपयोग करके एक / दो चर में लागू फ़ंक्शन का परिणाम है।

उदाहरण:

स्थिति x <<xtabs (~ राज्यों + स्थिति, PSOE_07)


0

मेरे पास मिक्सकैप्टिल्स के लिए प्राथमिकता है।

लेकिन मैं अक्सर यह बताने के लिए कि चर प्रकार क्या है, अवधि का उपयोग करते हैं:

मिश्रितकैपिटल्स.मैट एक मैट्रिक्स है। मिश्रितकैप्टल.एलएम एक रैखिक मॉडल है। मिश्रितकैप.लॉग एक सूची वस्तु है।

और इसी तरह।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.