作者:Hadley Wickham
翻译:Ewen Wang
来源:Advanced R
文件名称应当有意义,并且以 .R 作结。
# Good
fit-models.R
utility-functions.R
# Bad
foo.r
stuff.r
如果是一系列文件,序列号应当在文件之前。
0-download.R
1-parse.R
2-explore.R
变量和方程的名称应当是小写。使用下划线(_)来分割名称内的单词。一般而言,变量的名称应当是名次,而方程的名称应当是动词。命名尽量简洁有意义,虽然并非易事。
# Good
day_one
day_1
# Bad
first_day_of_the_month
DayOne
dayone
djm1
如果可能,要避免重复命名。否则,令读者不解。
# Bad
T <- FALSE
c <- 10
mean <- function(x) sum(x)
在运算符(=, +, -, <-, 等)的两边加入空格。这个规则同样适用于函数内调用时(=)。始终在逗号后加空格,而之前不加(规则同英文写作)。
# Good
average <- mean(feet / 12 + inches, na.rm = TRUE)
# Bad
average<-mean(feet/12+inches,na.rm=TRUE)
有一处例外,在使用 :: 时。:: 和 ::: 不需要空格在包围。
# Good
x <- 1:10
base::get
# Bad
x <- 1 : 10
base :: get
除了调用方程时,在括号的左边加一空格。
# Good
if (debug) do(x)
plot(x, y)
# Bad
if(debug)do(x)
plot (x, y)
如果能使等号或命名(<-)对齐,额外的空格则得到提倡。
list(
total = a + b + c,
mean = (a + b + c) / n
)
不要在括号里的代码周围加入空格。
# Good
if (debug) do(x)
diamonds[5, ]
# Bad
if ( debug ) do(x) # No spaces around debug
x[1,] # Needs a space after the comma
x[1 ,] # Space goes after comma not before
永远不要使前花括号单独一行;除了和 else 连接,永远使后花括号单独一行。
永远在花括号内缩进。
# Good
if (y < 0 && debug) {
message("Y is negative")
}
if (y == 0) {
log(x)
} else {
y ^ x
}
# Bad
if (y < 0 && debug)
message("Y is negative")
if (y == 0) {
log(x)
}
else {
y ^ x
}
使很短的语句保留在同一行是允许的。
if (y < 0 && debug) message("Y is negative")
尽量使你的代码控制在每行80个字母。这样使打印出来的代码具有客观性。如果你发现你的代码一行乘不下时,这是个好的信号提醒你把代码压缩到一个独立的方程里。
当缩进代码时,使用两个空格;不要使用 tab 或 tab 加 空格。
上面规则的唯一例外是,当你在写一个方程时。在这种情况下,缩进到方程开始定义的位置。
long_function_name <- function(a = "a long argument",
b = "another argument",
c = "another long argument") {
# As usual code is indented by two spaces.
}
使用 <- , 摒弃 = 。
# Good
x <- 5
# Bad
x = 5
批注参考
请批注你的代码。每一个批准以#带一个空格开始。批注的内容是“为什么”,而不是“是什么”。
使用一行 - 或 = 来分割你的代码,从而更具可读性。
# Load data ---------------------------
# Plot data ---------------------------