Який у вас кращий стиль для називання змінних в R? [зачинено]


110

Яким умовам для іменування змінних та функцій ви надаєте перевагу в коді R?

Наскільки я можу сказати, існує декілька різних умов, які співіснують у какофонній гармонії:

1. Використання роздільника періоду, наприклад

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

Плюси: Має історичний пріоритет в R співтоваристві, поширений по всьому ядру R, і рекомендованого R Style Guide від Google .

Мінуси: Поповнитися об'єктно-орієнтованими конотаціями та заплутаними для R новачків

2. Використання підкреслень

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

Плюси: загальна конвенція у багатьох програмах; надається перевагу посібнику зі стилів Хадлі Вікхем і використовується у пакунках ggplot2 та plyr.

Мінуси: історично не використовуються програмістами R; прикро відображається на операторі '<-' в Emacs-Speaks-Statistics (змінна з 'ess-toggle-underscore').

3. Використання змішаної капіталізації (camelCase)

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

Плюси: Очікується, що в декількох мовних спільнотах є широке поширення.

Мінуси: Є останнім прецедентом, але не використовувався історично (ні в базі R, ні в його документації).

Нарешті, як би це не було досить заплутаним, я повинен зазначити, що Посібник зі стилів Google стверджує про точкове позначення змінних, але змішану велику літери для функцій.

Відсутність послідовного стилю для пакетів R є проблематичною на кількох рівнях. З точки зору розробника, це ускладнює підтримання та розширення коду інших (особливо, коли його стиль не відповідає вашому). З точки зору користувача R, непослідовний синтаксис посилює криву навчання R шляхом множення способів вираження поняття (наприклад, це функція мовлення дати asDate (), as.date () або as_date ()? Ні, це як. Дата()).


1
Є також випадки , коли MATLAB типу alllowercaseімен змінних, і безліч прямих-з-рівнянь дуже коротких імен ( x, yі т.д.).
Річі Коттон

5
Підкреслення - як пітон, тому я, як правило, використовую підкреслення. ESS слід виправити, це справді нерозумно.
Брендан ОКоннор

7
Немає що виправити, у ньому є перемикач для цього. Але поведінка за замовчуванням - інтерпретувати підкреслення як ярлик для <- заощадження клавіші для натискання. Отже, якщо ви публікуєте змінні з підкресленнями (Привіт, Хадлі), ви змушуєте кожного користувача ESS два рази натиснути _, щоб отримати оригінальну поведінку - або налаштувати їх налаштування ESS. Я все ще віддаю перевагу camelCase на нових морських милях.
Дірк Еддельбуеттель

2
У camelCase теж є проблеми, наприклад, стандартний корпус верблюда ImfDataTransformedабо натуральна розширена версія IMFDataTransformedне так легко читати, як мій бажаний TOGGLEcamelCase: IMFdataTransformed...
PatrickT

1
Я голосую, щоб закрити це питання поза темою, оскільки відповіді повинні бути обґрунтовані думкою.
Бен Болкер

Відповіді:


81

Хороші попередні відповіді, тому лише трохи додати сюди:

  • підкреслення дійсно дратує користувачів ESS; враховуючи, що ESS досить широко використовується, ви не побачите багатьох підкреслень у коді, автором яких є користувачі ESS (а цей набір включає в себе купу R Core, а також авторів CRAN, винятки, незважаючи на Хадлі);

  • крапки теж злі, тому що вони можуть змішатися у простому методі відправки; Я вважаю, що колись я читав коментарі до цього ефекту в одному зі списків R: точки є історичним артефактом і більше не заохочуються;

  • тож у нас чіткий переможець все ще стоїть в останньому турі: camelCase. Я також не впевнений, чи дійсно я згоден із твердженням про «відсутність прецеденту в громаді R».

І так: прагматизм та послідовність козирної догми. Тож що б не працювало і використовувалося колегами та співавторами. Зрештою, у нас все ще є пробіл і дужки, щоб сперечатися про це :)


6
+1 Добре сказано! [Якби тільки основна команда виклала б остаточний посібник зі стилів; Я відчуваю, що це дало б більше довіри до їх уже мається на увазі використання.]
Шейн

1
Я можу просто згадати, виходячи зі свого власного ухилу до змішаного випадку, але я вважаю, що RG завжди використовував, коли я працював на нього. Я думаю, що добре для RG, це добре для мене!
geoffjentry

Джефф: Непогане правило пройти повз :)
Дірк Еддельбуеттель

2
Дякую за великі пальці. Що стосується документа "канонічного стилю": бажаючи не робити цього, я б не їхав на рожевих поні. Можливо, ви можете почати з написання чогось, що ви могли б наклеїти на R Wiki, і ми всі редагуємо, приймаємо та дотримуємось цього. Надія випливає вічною, як кажуть ...
Дірк Еддельбуеттель

1
@Dirk - Я планую почати прямувати до кожуха верблюдів, виходячи з вашої рекомендації, але мені цікаво, якщо ви знаєте, чому, ?make.namesздається, пропонується вважати, що кращі розділені імена кращі?
Девід Лебоуер

73

Я провів опитування того, які конвенції про іменування фактично використовуються в CRAN, які прийняли до журналу R :) Ось графік, що підсумовує результати:

введіть тут опис зображення

Виявляється (можливо, не сюрпризів), що найменшеCamelCase найчастіше використовувались для імен функцій та period.separated імена, які найчастіше використовуються для параметрів. Використовувати UpperCamelCase, як пропагує керівництво Google щодо стилю R , дійсно рідко, і дещо дивно, що вони виступають за використання цієї конвенції про іменування.

Повний документ тут:

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

Було б добре оновити цю статтю.
Самуель-Роза

34

Підкреслюємо всю дорогу! Всупереч поширеній думці, в базі R є ряд функцій, які використовують підкреслення. Біжи, grep("^[^\\.]*$", apropos("_"), value = T)щоб побачити їх усіх.

Я використовую офіційний стиль кодування Хадлі ;)


1
Це акуратно! Я раніше не знав про функцію apropos . Це повертає 10 функцій для мене в R 2.9.0; Я навряд чи можу сказати, що це вагомий випадок. Яке обґрунтування підкреслює, коли вони очевидно в меншості для R?
Шейн

3
Ну, це 16 у R 2.10.0, так що це збільшення на 60% за версію;) Мені вони в основному подобаються, тому що вони нагадують мені про Рубі; camelCase нагадує мені Java.
хадлі

6
Хедлі, моє серце говорить про підтримку вашого підкреслення повстанців, але моя голова говорить про те, щоб дотримуватись стандартів громади, і сказати «так» camelCase. :( Але, можливо, неузгодженість - це все, що має значення.
medriscoll

5

Мені подобається camelCase, коли верблюд насправді надає щось значуще - наприклад, тип даних.

dfProfitLoss, де df = фрейм даних

або

vdfMergedFiles (), де функція бере вектор і випилює фрейм даних

Хоча я думаю, що _ дійсно додає читабельності, просто існує занадто багато проблем із використанням.-_ Або інших символів в іменах. Особливо, якщо ви працюєте на кількох мовах.


3

Це зводиться до особистих уподобань, але я дотримуюсь посібника зі стилю google, оскільки він відповідає стилю основної команди. Я ще не бачив підкреслення в змінній в базі R.


3

Як я тут зазначаю:

Як багатослівність ідентифікаторів впливає на продуктивність програміста?

варто пам’ятати, наскільки зрозумілі ваші імена змінних вашим колегам / користувачам, якщо вони не є носіями мови ...

З цієї причини я б сказав, що підкреслення та періоди є кращими з великої літери, але, як ви зазначаєте, послідовність є важливою для вашого сценарію.


2

Як вже згадували інші, підкреслення підкреслить багато людей. Ні, він не є багатослівним, але теж не особливо поширений.

Використання точок як розділювача стає трохи волохатим із класами S3 тощо.

На моєму досвіді, здається, що багато гнучкостей з великою мазковістю R віддають перевагу використанню camelCase, з деяким використанням крапок і дещо підкресленням.


1

Зазвичай я перейменую свої змінні за допомогою ix підкреслення та змішаної великої літери (camelCase). Прості змінні називають за допомогою підкреслення, наприклад:

PSOE_votes -> кількість голосів за PSOE (політична група Іспанії).

PSOE_states -> Категоричний, вказує стан, коли PSOE виграє {Арагон, Андалусія, ...)

PSOE_political_force -> Категорія, вказує на позицію між політичними групами PSOE {перший, другий, третій)

PSOE_07 -> Союз PSOE_votes + PSOE_states + PSOE_political_force у 2007 році (h eader -> голоси, штати, позиція )

Якщо моя змінна є результатом застосованої функції в одній / двох змінних, я використовую змішану велику літери.

Приклад:

positionXstates <- xtabs (~ держави + позиція, PSOE_07)


0

Я маю перевагу перед змішаними столицями.

Але я часто використовую періоди, щоб вказати, що таке тип змінної:

mixCapitals.mat - матриця. mixedCapitals.lm - лінійна модель. mixCapitals.lst - об'єкт списку.

і так далі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.