R에서 변수 이름을 지정할 때 선호하는 스타일은 무엇입니까? [닫은]


110

R 코드에서 선호하는 변수 및 함수 명명 규칙은 무엇입니까?

내가 말할 수있는 한, 몇 가지 다른 관습이 있으며, 모두 불협화음으로 공존합니다.

1. 마침표 구분자 사용, 예 :

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

장점 : R 커뮤니티에서 역사적 우선 순위를 가지며 R 코어 전체에 널리 퍼져 있으며 Google의 R 스타일 가이드에서 권장합니다 .

단점 : 객체 지향적 의미가있는 Rife 및 R 초보자에게 혼란

2. 밑줄 사용

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

장점 : 많은 프로그래밍 언어의 공통 관례입니다. Hadley Wickham의 Style Guide가 선호 하며 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, 등).
Richie Cotton

5
밑줄은 파이썬과 같으므로 밑줄을 사용하는 경향이 있습니다. ESS를 수정해야합니다. 정말 어리석은 일입니다.
Brendan OConnor

7
수정할 것이 없으며 토글이 있습니다. 그러나 기본 동작 은 밑줄을 <-누를 키를 저장하는 단축키로 해석하는 것입니다. 따라서 밑줄 (Hi, Hadley)이있는 변수를 게시하는 경우 모든 ESS 사용자가 _를 두 번 눌러 원래 바아 비어를 얻거나 ESS 설정을 사용자 정의하도록합니다. 나는 여전히 새로운 해상 마일로 camelCase를 선호합니다.
Dirk Eddelbuettel 2009

2
camelCase에도 문제가 있습니다. 예를 들어 표준 낙타 케이스 ImfDataTransformed또는 자연 확장 버전 IMFDataTransformed은 내가 선호하는 TOGGLEcamelCase만큼 읽기 쉽지 않습니다. IMFdataTransformed...
PatrickT

1
나는이 질문을 주제에서 벗어난 것으로 종결하는 데 투표하는 이유는 답변이 의견을 기반으로하기 때문입니다.
Ben Bolker

답변:


81

좋은 이전 답변이므로 여기에 약간만 추가하십시오.

  • 밑줄은 ESS 사용자에게 정말 짜증납니다. ESS가 꽤 널리 사용된다는 점을 감안할 때 ESS 사용자가 작성한 코드에는 밑줄이 많지 않을 것입니다 (그 세트에는 CRAN 작성자뿐만 아니라 R Core도 포함되어 있습니다.

  • 점들도 단순한 메소드 디스패치에서 뒤섞 일 수 있기 때문에 악합니다. 나는 R 목록 중 하나에서이 효과에 대한 주석을 읽은 적이 있다고 생각합니다. 점은 역사적인 유물이며 더 이상 권장되지 않습니다.

  • 그래서 우리는 마지막 라운드에서 여전히 확실한 승자가 있습니다 : camelCase. 나는 또한 'R 커뮤니티에서 전례가 없다'는 주장에 정말로 동의하는지 확실하지 않습니다.

그리고 그렇습니다 : 실용주의와 일관성이 교리를 능가합니다. 따라서 동료와 공동 저자가 작동하고 사용하는 모든 것이 있습니다. 결국, 우리는 여전히 논쟁 할 공백과 중괄호가 있습니다. :)


6
+1 잘했다! [핵심 팀만이 확실한 스타일 가이드를 내놓는다면; 그 자신이 이미 암시 적 사용에 더 많은 신뢰를 줄 것 같은 느낌].
셰인

1
혼합 케이스에 대한 내 자신의 편견에 따라 잘못 기억할 수 있지만 RG가 그를 위해 일할 때 항상 사용했던 것이라고 생각합니다. 나는 RG에 좋은 것이 나에게 좋은 것이라고 생각합니다!
geoffjentry 2009

Geoff : 나쁜 규칙은 아닙니다. :)
Dirk Eddelbuettel 2009

2
좋아요 주셔서 감사합니다. '표준 스타일 문서'의 경우 : 함께 바라는 것이 그렇게되지 않거나 분홍색 조랑말을 타게 될 것입니다. R Wiki를 고수하고 우리 모두가 그것을 편집하고 채택하고 준수 할 수있는 무언가를 저작하여 시작할 수 있습니다. 그들이 말하는대로 희망은 ... 영원한 온천
더크 Eddelbuettel에게

1
@Dirk-귀하의 추천에 따라 낙타 케이스로 향할 계획이지만 ?make.names점으로 구분 된 이름이 선호되는 이유를 아는 이유 가 궁금합니다 .
David LeBauer 2011 년

73

R Journal에 채택 된 CRAN에서 실제로 사용되는 명명 규칙에 대한 설문 조사를 수행했습니다. 결과를 요약 한 그래프는 다음과 같습니다.

여기에 이미지 설명 입력

lowerCamelCase가 함수 이름과 마침표로 가장 자주 사용되는 것으로 밝혀졌습니다. 그러나 Google의 R 스타일 가이드에서 옹호하는 것처럼 UpperCamelCase를 사용하는 것은 매우 드뭅니다. 이러한 명명 규칙을 사용하여 옹호하는 것은 약간 이상합니다.

전체 논문은 다음과 같습니다.

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


2
백분율이 100 %가되지 않는 이유는 무엇입니까?
e9t 2014-06-13

10
@ e9t 이름은 여러 명명 규칙과 일치 할 수 있기 때문입니다. printUpperCamel 및 .OTHER_style을 제외한 모든 규칙과 일치합니다.
Rasmus Båth 2014-06-16

이 문서를 업데이트하면 좋을 것입니다.
Samuel-Rosa

34

밑줄 끝까지! 대중의 의견과는 달리 밑줄을 사용하는 기본 R에는 여러 기능이 있습니다. grep("^[^\\.]*$", apropos("_"), value = T)그들 모두를보기 위해 달려라 .

나는 공식적인 Hadley 스타일 의 코딩을 사용한다;)


1
그거 멋지다! 이전 에는 apropos 기능을 몰랐습니다 . 이것은 R 2.9.0에서 10 개의 함수를 반환합니다. 나는 그것이 설득력있는 경우라고 거의 말할 수 없다. 밑줄이 R에 대해 분명히 소수 일 때 밑줄에 대한 근거는 무엇입니까?
Shane

3
R 2.10.0에서는 16 개이므로 버전 당 60 % 증가한 것입니다.) 저는 주로 Ruby를 생각 나게하기 때문에 좋아합니다. camelCase는 Java를 생각 나게합니다.
해들리

6
해들리, 내 마음은 당신의 반란을지지하라고 말하지만, 내 머리는 커뮤니티 표준을 존중하고 camelCase에 예라고 말하고 있습니다. :( 그러나 아마 자기 일관성은 모든 문제입니다.
medriscoll

5

저는 camel이 실제로 데이터 유형과 같은 의미있는 것을 제공 할 때 camelCase를 좋아합니다.

dfProfitLoss, 여기서 df = 데이터 프레임

또는

vdfMergedFiles (), 여기서 함수는 벡터를 받아 데이터 프레임을 뱉어냅니다.

_이 가독성을 높이는 것 같지만 .-_ 또는 다른 문자를 이름에 사용하는 데는 너무 많은 문제가있는 것 같습니다. 특히 여러 언어로 작업하는 경우.


3

이것은 개인적인 취향에 달려 있지만 핵심 팀의 스타일과 일치하기 때문에 Google 스타일 가이드를 따릅니다. 기본 R의 변수에 아직 밑줄이 표시되지 않았습니다.



2

다른 사람들이 언급했듯이 밑줄은 많은 사람들을 망칠 것입니다. 아니요, verboten은 아니지만 특히 일반적이지 않습니다.

점을 구분 기호로 사용하면 S3 클래스 등에서 약간 복잡해집니다.

내 경험상, R의 많은 멍청이가 camelCase 사용을 선호하는 것 같으며, 약간의 점 사용과 밑줄이 번져 있습니다.


1

보통 저는 ix의 밑줄과 혼합 대문자 (camelCase)를 사용하여 변수 이름을 바꿉니다. 간단한 변수는 밑줄을 사용하여 이름을 지정합니다. 예 :

PSOE_votes- > PSOE (스페인의 정치 그룹)에 대한 투표 수.

PSOE_states- > Categorical, PSOE가이기는 주를 나타냅니다 {Aragon, Andalucia, ...)

PSOE_political_force- > 범주, PSOE의 정치 그룹 간의 위치를 ​​나타냅니다 (첫 번째, 두 번째, 세 번째)

PSOE_07- > 2007 년 PSOE_votes + PSOE_states + PSOE_political_force 연합 (h eader- > 투표, 주, 위치 )

내 변수가 하나 / 두 개의 변수에 적용된 함수의 결과 인 경우 혼합 대문자를 사용합니다.

예:

positionXstates <-xtabs (~ states + position, PSOE_07)


0

mixedCapitals를 선호합니다.

그러나 나는 종종 마침표를 사용하여 변수 유형이 무엇인지 나타냅니다.

mixedCapitals.mat는 행렬입니다. mixedCapitals.lm은 선형 모델입니다. mixedCapitals.lst는 목록 객체입니다.

등등.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.