Kiểu đặt tên biến trong R ưa thích của bạn là gì? [đóng cửa]


110

Bạn thích quy ước nào để đặt tên biến và hàm trong mã R?

Theo như tôi có thể nói, có một số quy ước khác nhau, tất cả đều cùng tồn tại trong sự hài hòa cacophonous:

1. Sử dụng dấu phân cách, ví dụ:

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

Ưu điểm: Có lịch sử ưu tiên trong cộng đồng R, phổ biến trong toàn bộ lõi R và được Hướng dẫn Kiểu R của Google đề xuất .

Nhược điểm: Đầy ẩn ý hướng đối tượng và gây nhầm lẫn cho người mới R

2. Sử dụng dấu gạch dưới

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

Ưu điểm: Một quy ước chung trong nhiều ngôn ngữ lập trình; được ưa chuộng bởi Hướng dẫn phong cách của Hadley Wickham và được sử dụng trong gói ggplot2 và plyr.

Nhược điểm: Không được lập trình viên R sử dụng trong lịch sử; được ánh xạ một cách khó chịu tới toán tử '<-' trong Emacs-Speaks-Statistics (có thể thay đổi bằng 'ess-toggle-underscore').

3. Sử dụng cách viết hoa hỗn hợp (camelCase)

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

Ưu điểm: Dường như được chấp nhận rộng rãi trong một số cộng đồng ngôn ngữ.

Nhược điểm: Có tiền lệ gần đây, nhưng không được sử dụng trong lịch sử (trong cơ sở R hoặc tài liệu của nó).

Cuối cùng, như thể nó chưa đủ khó hiểu, tôi phải chỉ ra rằng Hướng dẫn Kiểu của Google lập luận về ký hiệu dấu chấm cho các biến, nhưng viết hoa hỗn hợp cho các hàm.

Việc thiếu phong cách nhất quán giữa các gói R là vấn đề ở một số cấp độ. Từ quan điểm của nhà phát triển, nó làm cho việc duy trì và mở rộng mã của người khác trở nên khó khăn (đặc biệt là khi phong cách của nó không phù hợp với mã của bạn). Từ quan điểm của người dùng R, cú pháp không nhất quán sẽ mở ra đường cong học tập của R, bằng cách nhân các cách một khái niệm có thể được thể hiện (ví dụ: đó là hàm truyền ngày asDate (), as.date () hoặc as_date ()? Không, nó là. Ngày()).


1
Ngoài ra còn có trường hợp của phong cách MATLAB alllowercasetên biến, và rất nhiều tên rất ngắn thẳng từ-the-phương trình ( x, y, vv).
Richie Cotton

5
dấu gạch dưới giống như python, vì vậy tôi có xu hướng sử dụng dấu gạch dưới. ESS nên được sửa, điều đó thực sự ngớ ngẩn.
Brendan OConnor

7
Không có gì để sửa chữa, nó có một chuyển đổi cho điều đó. Nhưng hành vi mặc định là giải thích một dấu gạch dưới như một phím tắt cho <- lưu cho bạn một phím để nhấn. Vì vậy, nếu bạn xuất bản các biến có dấu gạch dưới (Chào, Hadley), bạn buộc mọi người dùng ESS phải nhấn _ hai lần để có được bahaviour ban đầu - hoặc để tùy chỉnh thiết lập ESS của họ. Tôi vẫn thích camelCase bởi một hải lý mới.
Dirk Eddelbuettel

2
camelCase có vấn đề quá, ví dụ như lạc đà Trường hợp tiêu chuẩn ImfDataTransformedhoặc phiên bản mở rộng tự nhiên IMFDataTransformedkhông dễ dàng để đọc như TOGGLEcamelCase ưa thích của tôi: IMFdataTransformed...
PatrickT

1
Tôi bỏ phiếu để đóng câu hỏi này là lạc đề vì các câu trả lời nhất định phải dựa trên ý kiến.
Ben Bolker

Câu trả lời:


81

Câu trả lời tốt trước đó nên chỉ cần thêm một chút ở đây:

  • gạch dưới thực sự gây khó chịu cho người dùng ESS; do ESS được sử dụng khá rộng rãi, bạn sẽ không thấy nhiều dấu gạch dưới trong mã do người dùng ESS tạo ra (và tập hợp đó bao gồm một loạt các tác giả R Core cũng như CRAN, mặc dù có loại trừ như Hadley);

  • dấu chấm cũng xấu vì chúng có thể bị lẫn lộn trong công văn phương pháp đơn giản; Tôi tin rằng tôi đã từng đọc các bình luận về hiệu ứng này trên một trong danh sách R: dấu chấm là một hiện vật lịch sử và không còn được khuyến khích;

  • vì vậy chúng tôi có một người chiến thắng rõ ràng vẫn đang đứng ở vòng cuối cùng: camelCase. Tôi cũng không chắc liệu mình có thực sự đồng ý với nhận định 'thiếu ưu việt trong cộng đồng R' hay không.

Và vâng: chủ nghĩa thực dụng và sự nhất quán át chủ nghĩa giáo điều. Vì vậy, bất cứ điều gì hiệu quả và được sử dụng bởi các đồng nghiệp và đồng tác giả. Rốt cuộc, chúng ta vẫn còn khoảng trắng và dấu ngoặc nhọn để tranh luận :)


6
+1 Cũng nói! [Giá như nhóm nòng cốt đưa ra một hướng dẫn phong cách dứt khoát; Tôi cảm thấy như thế sẽ mang lại nhiều sự tin cậy hơn cho cách sử dụng đã ngụ ý của họ.]
Shane

1
Tôi chỉ có thể đoán sai dựa trên thành kiến ​​của tôi đối với trường hợp hỗn hợp nhưng tôi tin rằng đó là điều mà RG luôn sử dụng khi tôi làm việc cho anh ấy. Tôi nghĩ những gì tốt cho RG là tốt cho tôi!
geoffjentry

Geoff: Không phải là một quy tắc tồi để thực hiện :)
Dirk Eddelbuettel

2
Cảm ơn vì đã thích. Đối với 'tài liệu phong cách kinh điển': ước gì không thành như vậy, hoặc tôi đang cưỡi ngựa con màu hồng. Có thể bạn có thể bắt đầu bằng việc sáng tác một cái gì đó mà bạn có thể bám vào R Wiki và tất cả chúng ta đều chỉnh sửa, chấp nhận và tuân thủ nó. Hope lò xo vĩnh cửu, như họ nói ...
Dirk Eddelbuettel

1
@Dirk - Tôi dự định bắt đầu hướng tới vỏ lạc đà dựa trên đề xuất của bạn, nhưng tôi tò mò không biết bạn có biết tại sao lại ?make.namesxuất hiện đề xuất rằng các tên được phân tách bằng dấu chấm được ưu tiên không?
David LeBauer

73

Tôi đã thực hiện một cuộc khảo sát về những quy ước đặt tên nào thực sự được sử dụng trên CRAN đã được chấp nhận cho Tạp chí R :) Dưới đây là biểu đồ tóm tắt kết quả:

nhập mô tả hình ảnh ở đây

Hóa ra (có lẽ không có gì ngạc nhiên) rằng lowCamelCase thường được sử dụng nhất cho các tên hàm và tên period.separated thường được sử dụng nhất cho các tham số. Tuy nhiên, để sử dụng UpperCamelCase, như hướng dẫn kiểu R của Google ủng hộ thì thực sự rất hiếm, và hơi lạ là họ lại ủng hộ việc sử dụng quy ước đặt tên đó.

Toàn bộ bài báo ở đây:

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


2
Tại sao tỷ lệ phần trăm không tăng lên đến 100%?
e9t

10
@ e9t Bởi vì một cái tên có thể phù hợp với nhiều cách đặt tên. printkhớp với tất cả các quy ước ngoại trừ UpperCamel và .OTHER_style.
Rasmus Bååth

Sẽ rất vui nếu cập nhật bài báo này.
Samuel-Rosa

34

Đánh dấu tất cả các cách! Trái với quan điểm phổ biến, có một số hàm trong cơ sở R sử dụng dấu gạch dưới. Chạy grep("^[^\\.]*$", apropos("_"), value = T)để xem tất cả.

Tôi sử dụng phong cách viết mã chính thức của Hadley ;)


1
Thật gọn gàng! Tôi đã không biết về hàm apropos trước đây. Điều này trả về 10 chức năng cho tôi trong R 2.9.0; Tôi khó có thể nói đó là một trường hợp hấp dẫn. Cơ sở lý luận của bạn cho việc gạch dưới là gì khi chúng rõ ràng là thiểu số đối với R?
Shane

3
Vâng, nó là 16 trong R 2.10.0, vì vậy đó là mức tăng 60% cho mỗi phiên bản;) Tôi chủ yếu thích chúng vì chúng làm tôi nhớ đến Ruby; camelCase làm tôi nhớ đến Java.
hadley

6
Hadley, trái tim tôi nói hãy ủng hộ phong trào nổi dậy của bạn, nhưng đầu tôi nói rằng hãy tôn trọng tiêu chuẩn cộng đồng và hãy nói đồng ý với camelCase. :( Nhưng có lẽ tự nhất quán là tất cả những vấn đề đó.
medriscoll

5

Tôi thích camelCase khi lạc đà thực sự cung cấp một cái gì đó có ý nghĩa - như kiểu dữ liệu.

dfProfitLoss, trong đó df = dataframe

hoặc là

vdfMergedFiles (), nơi hàm nhận một vectơ và tạo ra một khung dữ liệu

Trong khi tôi nghĩ _ thực sự làm tăng khả năng đọc, dường như có quá nhiều vấn đề với việc sử dụng.-_ Hoặc các ký tự khác trong tên. Đặc biệt nếu bạn làm việc trên nhiều ngôn ngữ.


3

Điều này phụ thuộc vào sở thích cá nhân, nhưng tôi làm theo hướng dẫn về phong cách của google vì nó phù hợp với phong cách của nhóm cốt lõi. Tôi vẫn chưa thấy dấu gạch dưới trong một biến trong cơ sở R.


3

Như tôi đã chỉ ra ở đây:

Độ chi tiết của số nhận dạng ảnh hưởng đến hiệu suất của một lập trình viên như thế nào?

Cần lưu ý rằng các tên biến của bạn dễ hiểu như thế nào đối với đồng nghiệp / người dùng của bạn nếu họ không phải là người bản ngữ ...

Vì lý do đó, tôi muốn nói dấu gạch dưới và dấu chấm tốt hơn viết hoa, nhưng như bạn đã chỉ ra, tính nhất quán là điều cần thiết trong tập lệnh của bạn.


2

Như những người khác đã đề cập, dấu gạch dưới sẽ làm hỏng rất nhiều người. Không, nó không dài dòng nhưng nó cũng không đặc biệt phổ biến.

Sử dụng các dấu chấm làm dấu phân cách sẽ có một chút lông với các lớp S3 và những thứ tương tự.

Theo kinh nghiệm của tôi, có vẻ như rất nhiều người thích sử dụng R thích sử dụng camelCase, với một số cách sử dụng dấu chấm và một số dấu gạch dưới.


1

Thông thường, tôi đổi tên các biến của mình bằng cách sử dụng ix dấu gạch dưới và viết hoa hỗn hợp (camelCase). Các biến đơn giản được đặt tên bằng cách sử dụng dấu gạch dưới, ví dụ:

PSOE_votes -> số phiếu bầu cho PSOE (nhóm chính trị của Tây Ban Nha).

PSOE_states -> Categorical, cho biết trạng thái mà PSOE thắng {Aragon, Andalucia, ...)

PSOE_political_force -> Categorial, cho biết vị trí giữa các nhóm chính trị của PSOE {thứ nhất, thứ hai, thứ ba)

PSOE_07 -> Liên minh PSOE_votes + PSOE_states + PSOE_political_force tại 2007 (h eader -> phiếu bầu, tiểu bang, vị trí )

Nếu biến của tôi là kết quả của hàm được áp dụng trong một / hai Biến, tôi sử dụng cách viết hoa hỗn hợp.

Thí dụ:

positionXstates <- xtabs (~ trạng thái + vị trí, PSOE_07)


0

Tôi có sở thích đối với Vốn hỗn hợp.

Nhưng tôi thường sử dụng dấu chấm để chỉ ra loại biến là gì:

mixCapitals.mat là một ma trận. MixedCapitals.lm là một mô hình tuyến tính. mixCapitals.lst là một đối tượng danh sách.

và như thế.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.