สไตล์ที่คุณต้องการสำหรับการตั้งชื่อตัวแปรใน R คืออะไร? [ปิด]


110

ข้อกำหนดในการตั้งชื่อตัวแปรและฟังก์ชันใดที่คุณชอบในรหัส R

เท่าที่ฉันสามารถบอกได้มีอนุสัญญาที่แตกต่างกันหลายฉบับซึ่งทั้งหมดนี้อยู่ร่วมกันในความสามัคคี cacophonous:

1. การใช้ตัวคั่นจุดเช่น

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

จุดเด่น: มีความสำคัญทางประวัติศาสตร์ในชุมชน R ที่แพร่หลายทั่ว R หลักและแนะนำโดยคู่มือสไตล์ของ Google R

จุดด้อย: มีความหมายแฝงเชิงวัตถุและสร้างความสับสนให้กับมือใหม่ R

2. การใช้เครื่องหมายขีดล่าง

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

ข้อดี: การประชุมทั่วไปในการเขียนโปรแกรมหลายภาษา; เป็นที่ชื่นชอบของคู่มือสไตล์ของ Hadley Wickhamและใช้ในแพ็คเกจ ggplot2 และ plyr

จุดด้อย: โปรแกรมเมอร์ R ไม่ได้ใช้ในอดีต ถูกแมปกับตัวดำเนินการ '<-' ใน Emacs-Speaks-Statistics อย่างน่ารำคาญ (แก้ไขได้ด้วย 'ess-toggle-underscore')

3. การใช้ตัวพิมพ์ใหญ่แบบผสม (camelCase)

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

ข้อดี:ดูเหมือนจะมีการยอมรับอย่างกว้างขวางในชุมชนภาษาต่างๆ

จุดด้อย:มีแบบอย่างล่าสุด แต่ไม่ได้ใช้ในอดีต (ในฐาน R หรือเอกสารประกอบ)

สุดท้ายนี้ราวกับว่ามันไม่สับสนพอฉันควรจะชี้ให้เห็นว่า Google Style Guide ระบุถึงสัญลักษณ์จุดสำหรับตัวแปร แต่การใช้ตัวพิมพ์ใหญ่แบบผสมสำหรับฟังก์ชัน

การขาดรูปแบบที่สอดคล้องกันในแพ็คเกจ R เป็นปัญหาในหลายระดับ จากมุมมองของนักพัฒนาซอฟต์แวร์ทำให้การดูแลรักษาและการขยายโค้ดของผู้อื่นเป็นเรื่องยาก (โดยเฉพาะที่รูปแบบไม่สอดคล้องกับของคุณเอง) จากมุมมองของผู้ใช้ R ไวยากรณ์ที่ไม่สอดคล้องกันทำให้เส้นโค้งการเรียนรู้ของ R เพิ่มขึ้นโดยการคูณวิธีที่แนวคิดอาจแสดงออกมา (เช่นฟังก์ชันการหล่อวันที่เป็นวันที่ (), as.date () หรือ as_date ()? วันที่ ())


1
นอกจากนี้ยังมีกรณีของสไตล์ MATLAB alllowercaseชื่อตัวแปรและความอุดมสมบูรณ์ของตรงจากที่สมชื่อที่สั้นมาก ( x, yฯลฯ )
Richie Cotton

5
ขีดล่างก็เหมือนงูหลามดังนั้นฉันมักจะใช้เครื่องหมายขีดล่าง ESS ควรได้รับการแก้ไขนั่นโง่จริงๆ
Brendan OConnor

7
ไม่มีอะไรต้องแก้ไขมันมีการสลับสำหรับสิ่งนั้น แต่พฤติกรรมเริ่มต้นคือการตีความขีดล่างเป็นทางลัดสำหรับ <- บันทึกคีย์ที่จะกด ดังนั้นหากคุณเผยแพร่ตัวแปรด้วยเครื่องหมายขีดล่าง (สวัสดี Hadley) คุณบังคับให้ผู้ใช้ ESS ทุกคนกด _ สองครั้งเพื่อรับ bahaviour ดั้งเดิมหรือกำหนดค่า ESS เอง ฉันยังคงชอบ camelCase ด้วยไมล์ทะเลใหม่
Dirk Eddelbuettel

2
camelCase ก็มีปัญหาเช่นกันเช่นกรณีอูฐมาตรฐานImfDataTransformedหรือรุ่นขยายตามธรรมชาติIMFDataTransformedนั้นอ่านไม่ง่ายเหมือนกับ TOGGLEcamelCase ที่ฉันต้องการ: IMFdataTransformed...
PatrickT

1
ฉันโหวตให้ปิดคำถามนี้เป็นนอกประเด็นเนื่องจากคำตอบต้องอิงตามความคิดเห็น
Ben Bolker

คำตอบ:


81

คำตอบที่ดีก่อนหน้านี้เพียงเล็กน้อยเพื่อเพิ่มที่นี่:

  • ขีดล่างเป็นสิ่งที่น่ารำคาญสำหรับผู้ใช้ ESS เนื่องจาก ESS มีการใช้กันอย่างแพร่หลายคุณจะไม่เห็นขีดล่างจำนวนมากในโค้ดที่เขียนโดยผู้ใช้ ESS (และชุดนั้นประกอบด้วย R Core จำนวนมากเช่นเดียวกับผู้เขียน CRAN การตัดตอนเช่น Hadley แม้ว่าจะมี)

  • จุดเป็นสิ่งที่ชั่วร้ายเช่นกันเพราะสามารถผสมกันได้ในวิธีการจัดส่งแบบง่ายๆ ฉันเชื่อว่าฉันเคยอ่านความคิดเห็นเกี่ยวกับผลกระทบนี้ในรายการ R รายการหนึ่ง: จุดเป็นสิ่งประดิษฐ์ทางประวัติศาสตร์และไม่ได้รับการสนับสนุนอีกต่อไป

  • ดังนั้นเราจึงมีผู้ชนะที่ชัดเจนที่ยังคงยืนอยู่ในรอบที่แล้ว: camelCase ฉันยังไม่แน่ใจว่าฉันเห็นด้วยกับการยืนยันว่า 'ขาดอำนาจเหนือกว่าในชุมชน R' จริงๆหรือไม่

และใช่: ลัทธิปฏิบัตินิยมและความเชื่อมั่นของคนที่กล้าหาญ ดังนั้นสิ่งใดก็ตามที่ใช้ได้ผลและถูกใช้โดยเพื่อนร่วมงานและผู้เขียนร่วม ท้ายที่สุดเรายังมีพื้นที่ว่างและวงเล็บปีกกาที่จะโต้แย้ง :)


6
+1 พูดดี! [หากมีเพียงทีมแกนหลักเท่านั้นที่จะออกแนวทางสไตล์ที่ชัดเจน ฉันรู้สึกว่าจะให้ความเชื่อถือมากขึ้นกับการใช้งานโดยนัยของพวกเขาแล้ว]
เชน

1
ฉันอาจจะจำผิดโดยอาศัยอคติของตัวเองที่มีต่อกรณีแบบผสม แต่ฉันเชื่อว่านั่นคือสิ่งที่ RG ใช้เสมอเมื่อฉันทำงานให้เขา ฉันคิดว่าสิ่งที่ดีสำหรับ RG นั้นดีสำหรับฉัน!
geoffjentry

Geoff: ไม่ใช่กฎที่ไม่ถูกต้อง :)
Dirk Eddelbuettel

2
ขอบคุณที่ชอบ สำหรับ 'เอกสารรูปแบบบัญญัติ': ความปรารถนาจะไม่ทำเช่นนั้นหรือฉันจะขี่ม้าสีชมพู บางทีคุณอาจเริ่มต้นด้วยการเขียนบางสิ่งซึ่งคุณสามารถยึดติดกับ R Wiki และเราทุกคนแก้ไขปรับใช้และปฏิบัติตามนั้น หวังว่าจะเป็นนิรันดร์ตามที่พวกเขาพูด ...
Dirk Eddelbuettel

1
@ เดิร์ก - ฉันวางแผนที่จะเริ่มมุ่งหน้าไปยังปลอกอูฐตามคำแนะนำของคุณ แต่ฉันอยากรู้ว่าคุณรู้ไหมว่าทำไมจึง?make.namesแนะนำว่าควรใช้ชื่อที่คั่นด้วยจุด?
David LeBauer

73

ฉันได้สำรวจรูปแบบการตั้งชื่อที่ใช้จริงใน CRAN ที่ได้รับการยอมรับใน R Journal :) นี่คือกราฟสรุปผลลัพธ์:

ใส่คำอธิบายภาพที่นี่

ปรากฎว่า (อาจไม่น่าแปลกใจ) ที่ lowerCamelCase มักใช้สำหรับชื่อฟังก์ชันและช่วงเวลาชื่อที่แยกกันส่วนใหญ่มักใช้สำหรับพารามิเตอร์ ในการใช้ UpperCamelCase ตามที่แนะนำโดยคู่มือสไตล์ R ของ Googleนั้นหายากมากและเป็นเรื่องแปลกเล็กน้อยที่พวกเขาสนับสนุนโดยใช้หลักการตั้งชื่อนั้น

เอกสารฉบับเต็มอยู่ที่นี่:

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


2
ทำไมเปอร์เซ็นต์ไม่รวมกันถึง 100%?
e9t

10
@ e9t เนื่องจากชื่อสามารถจับคู่รูปแบบการตั้งชื่อได้หลายแบบ printตรงกับข้อตกลงทั้งหมดยกเว้น UpperCamel และ .OTHER_style
Rasmus Bååth

การปรับปรุงเอกสารนี้จะเป็นการดี
Samuel-Rosa

34

เน้นย้ำทุกทาง! ตรงกันข้ามกับความคิดเห็นที่เป็นที่นิยมมีหลายฟังก์ชันในฐาน R ที่ใช้เครื่องหมายขีดล่าง วิ่งgrep("^[^\\.]*$", apropos("_"), value = T)ไปดูพวกเขาทั้งหมด

ฉันใช้รูปแบบการเข้ารหัสอย่างเป็นทางการของHadley ;)


1
เรียบร้อย! ฉันไม่ทราบถึงฟังก์ชันaproposมาก่อน สิ่งนี้ส่งคืน 10 ฟังก์ชันสำหรับฉันใน R 2.9.0; ฉันแทบจะไม่พูดว่าเป็นกรณีที่น่าสนใจ เหตุผลของคุณในการขีดล่างคืออะไรเมื่อพวกเขาอยู่ในกลุ่มน้อยอย่างชัดเจนสำหรับ R?
เชน

3
มันคือ 16 ใน R 2.10.0 ดังนั้นจึงเพิ่มขึ้น 60% ต่อเวอร์ชัน) ฉันชอบมันเป็นหลักเพราะทำให้ฉันนึกถึง Ruby camelCase ทำให้ฉันนึกถึง Java
hadley

6
Hadley หัวใจของฉันบอกว่าจะสนับสนุนการก่อความไม่สงบของคุณ แต่หัวของฉันบอกว่าให้เคารพมาตรฐานชุมชนและตอบตกลงกับ camelCase :( แต่บางทีความสม่ำเสมอในตัวเองก็เป็นเรื่องสำคัญ
medriscoll

5

ฉันชอบ camelCase เมื่ออูฐมอบสิ่งที่มีความหมายเช่นประเภทข้อมูล

dfProfitLoss โดยที่ df = dataframe

หรือ

vdfMergedFiles () โดยที่ฟังก์ชันใช้เวกเตอร์และคายดาต้าเฟรมออกมา

ในขณะที่ฉันคิดว่า _ เพิ่มความสามารถในการอ่าน แต่ดูเหมือนว่าจะมีปัญหามากเกินไปในการใช้.-_ หรืออักขระอื่น ๆ ในชื่อ โดยเฉพาะอย่างยิ่งถ้าคุณทำงานในหลายภาษา


3

สิ่งนี้ขึ้นอยู่กับความชอบส่วนตัว แต่ฉันทำตามคำแนะนำสไตล์ของ Google เพราะมันสอดคล้องกับสไตล์ของทีมหลัก ฉันยังไม่เห็นขีดล่างในตัวแปรในฐาน R


3

ขณะที่ฉันชี้ให้เห็นที่นี่:

ความละเอียดถี่ถ้วนของตัวระบุมีผลต่อประสิทธิภาพของโปรแกรมเมอร์อย่างไร?

เป็นสิ่งที่ควรคำนึงถึงว่าชื่อตัวแปรของคุณนั้นเข้าใจได้ง่ายเพียงใดสำหรับเพื่อนร่วมงาน / ผู้ใช้ของคุณหากพวกเขาไม่ใช่เจ้าของภาษา ...

ด้วยเหตุนี้ฉันจึงบอกว่าขีดล่างและช่วงเวลาดีกว่าการใช้อักษรตัวพิมพ์ใหญ่ แต่ในขณะที่คุณชี้ให้เห็นความสอดคล้องเป็นสิ่งสำคัญในสคริปต์ของคุณ


2

ดังที่คนอื่น ๆ กล่าวถึงขีดล่างจะทำให้ผู้คนจำนวนมากเสียหาย ไม่มันไม่ใช่ verboten แต่ก็ไม่ธรรมดาเช่นกัน

การใช้จุดเป็นตัวคั่นทำให้เกิดความยุ่งยากเล็กน้อยกับคลาส S3 และสิ่งที่คล้ายกัน

จากประสบการณ์ของฉันดูเหมือนว่าพวกขี้โคลนระดับสูงจำนวนมากของ R จะชอบใช้ camelCase ด้วยการใช้จุดและขีดล่าง


1

โดยปกติฉันจะเปลี่ยนชื่อตัวแปรโดยใช้เครื่องหมายขีดล่าง ix และตัวพิมพ์ใหญ่แบบผสม (camelCase) ตัวแปรง่ายๆคือการตั้งชื่อโดยใช้เครื่องหมายขีดล่างเช่น

PSOE_votes -> จำนวนโหวตสำหรับ PSOE (กลุ่มการเมืองของสเปน)

PSOE_states -> จัดหมวดหมู่ระบุสถานะที่ PSOE ชนะ {Aragon, Andalucia, ... )

PSOE_political_force -> หมวดหมู่ระบุตำแหน่งระหว่างกลุ่มการเมืองของ PSOE (อันดับหนึ่งสองสาม)

PSOE_07 -> Union of PSOE_votes + PSOE_states + PSOE_political_force ที่ 2007 (h eader -> โหวตรัฐตำแหน่ง )

ถ้าตัวแปรของฉันเป็นผลมาจากฟังก์ชันที่ใช้ในตัวแปรหนึ่ง / สองฉันใช้ตัวพิมพ์ใหญ่แบบผสม

ตัวอย่าง:

positionXstates <- xtabs (~ สถานะ + ตำแหน่ง, PSOE_07)


0

ฉันมีความชอบสำหรับ mixedCapitals

แต่ฉันมักใช้จุดเพื่อระบุว่าประเภทตัวแปรคืออะไร:

mixedCapitals.mat เป็นเมทริกซ์ mixedCapitals.lm เป็นแบบจำลองเชิงเส้น mixedCapitals.lst เป็นวัตถุรายการ

และอื่น ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.