해당 포스트는 Hadley Wickham이 작성한 'The tidyverse style guide' 를 번역하여 정리한 글입니다.
Lists
Intro - 0. Welcome
Analysis - 1. Files
Analysis - 2. Syntax (1)
Analysis - 2. Syntax (2)
Analysis - 3. Functions
Analysis - 4. Pipes
Analysis - 5. ggplot2
Packages - 6. Files
Packages - 7. Documentation
Packages - 8. Tests
Packages - 9. Error messages
Packages - 10. News
Packages - 11. Git/GitHub
2. 문법(Syntax)
2.1 객체 이름(Object names)
"컴퓨터 과학에는 캐시 무효화와 이름 지정이라는 두 가지 어려움이 있습니다."
- 필 칼튼
변수와 함수 이름에는 소문자, 숫자, 밑줄(_
, underscores) 만 사용해야 하며, 이름에 단어 구분이 필요할 경우엔 밑줄(_
, underscores)를 사용하시면 됩니다.
# Good
day_one
day_1
# Bad
DayOne
dayone
기본 R은 함수 이름(contrib.url()
)과 클래스 이름(data.frame
)에 점(.
, dot)을 사용하지만, 점(.
)은 S3
객체 시스템 전용으로만 사용하는 것이 좋습니다. S3
메소드들은 function.class
로 이름이 주어지며, 만약 함수와 클래스 이름에 점(.
, dot)을 사용한다면 as.data.frame.data.frame()
와 같은 혼란스러운 이름이 생성될 수 있습니다.
변수 이름(ex: model_2018, model_2019, model_2020)에 데이터를 입력하려고 한다면, 목록(list)나 데이터 프레임(data.frame)을 대신 사용하는 것이 좋습니다.
일반적으로는 변수 이름은 명사로 만들고 함수이름은 동사로 만듭니다. 쉽지 않겠지만 항상 간결하고 의미있는 이름을 만들기 위해 노력해야 합니다.
# Good
day_one
# Bad
first_day_of_the_month
djm1
공통 함수 및 변수 이름을 재사용(re-using)하는 경우, 코드를 읽는 사람들에게 혼란을 줄 수 있기에 가급적 피하는 것이 좋습니다.
2.2 띄어쓰기(Spacing)
2.2.1 쉼표(Commas)
일반 언어 사용할 때와 같이, 항상 쉼표(,
, comma) 뒤에는 공백을 넣는 것이 좋습니다.
# Good
x[, 1]
# Bad
x[,1]
x[ ,1]
x[ , 1]
2.2.2 괄호(Parentheses)
정기적인 함수 호출을 위해 괄호 안이나 바깥쪽에 공백을 넣지 않는 것이 좋습니다.
# Good
mean(x, na.rm = TRUE)
# Bad
mean (x, na.rm = TRUE)
mean( x, na.rm = TRUE )
if
, for
, while
문을 사용할 때에는 괄호(( )
)의 앞뒤로 공백을 두는 것이 좋습니다.
# Good
if (debug) {
show(x)
}
# Bad
if(debug){
show(x)
}
함수 인수(arguments)에 사용되는 괄호(( )
) 뒤에는 공백을 두는 것이 좋습니다.
# Good
function(x) {}
# Bad
function (x) {}
function(x){}
2.2.3 수용(Embracing)
수용 연산자({{ }}
)는 자신의 특별한 동작을 강조할 수 있도록 항상 내부 공간이 있어야 합니다.
# Good
max_by <- function(data, var, by) {
data %>%
group_by({{ by }}) %>%
summarise(maximum = max({{ var }}, na.rm = TRUE))
}
# Bad
max_by <- function(data, var, by) {
data %>%
group_by({{by}}) %>%
summarise(maximum = max({{var}}, na.rm = TRUE))
}
2.2.4 인픽스 연산자(Infix operators)
대부분의 인픽스 연산자들(==
, +
, -
, <-
등)은 항상 앞뒤에 공간을 두는 것이 좋습니다.
# Good
height <- (feet * 12) + inches
mean(x, na.rm = TRUE)
# Bad
height<-feet*12+inches
mean(x, na.rm=TRUE)
인픽스 연산자들 중에는
절대 공간(space)로 둘러쌓이면 안되는 몇가지 예외
가 있습니다.
- 우선 순위가 높은 연산자들(high precedence) :
::
,:::
,$
,@
,[
,[[
,^
, 단항-
, 단항+
,:
# Good
sqrt(x^2 + y^2)
df$z
x <- 1:10
# Bad
sqrt(x ^ 2 + y ^ 2)
df $ z
x <- 1 : 10
- 우항(right-hand side)이 단일 식별자일 때 단측 공식(Single-sided formulas)
# Good
~foo
tribble(
~col1, ~col2,
"a", "b"
)
# Bad
~ foo
tribble(
~ col1, ~ col2,
"a", "b"
)
우항(right-hand side)이 복잡한 단측 공식(Single-sided formulas)에는 공백이 필요하지 않습니다.
# Good
~ .x + .y
# Bad
~.x + .y
!!
과!!!
를 사용하여tidy
평가에 사용했을 때(단일-
/+
와 동등한 우선순위를 가지기 때문에)
# Good
call(!!xyz)
# Bad
call(!! xyz)
call( !! xyz)
call(! !xyz)
좀 더 자세한 내용은 Hadley Wickham의 Advanced R 에서 확인하실 수 있습니다.
- 도움말(
help
) 연산자
# Good
package?stats
?mean
# Bad
package ? stats
? mean
2.2.5 Extra spaces
=
또는 <-
의 정렬이 향상되는 여분의 공백을 추가해도 됩니다.
# Good
list(
total = a + b + c,
mean = (a + b + c) / n
)
# Also fine
list(
total = a + b + c,
mean = (a + b + c) / n
)
일반적으로 공간(space)이 허용되지 않는 위치에는 공간(space)를 추가하지 않는 것이 좋습니다.
출처
[1] The tidyverse style guide
[2] Syntax: Operator Syntax and Precedence
[3] Advanced R by Hadley Wickham
▲ The tidyverse style gudie 원문 다운받기