《Advanced R》 style
良好的编码风格就像使用正确的标点符号。
没有它你也能应付,但它确实让事情更容易阅读。
与标点符号的风格一样,有许多可能的变化。
好的风格很重要。
因为虽然你的代码只有一个作者,但它通常会有多个读者。
当你和别人一起写代码的时候尤其如此。
在这种情况下,最好事先就一个共同的风格达成一致。
Notation and naming 符号和命名
1、File names 文件名
- 是有意义的
- 并以
.R
结尾的
如果文件需要按顺序运行,请在它们前面加上数字:
0-download.R
1-parse.R
2-explore.R
2、Object names 对象名称
变量(variable)名和函数(function)名应该是小写。
使用下划线( _ )分隔名称中的单词。
一般来说,变量名应该是名词;
函数名应该是动词。
求其名,求其义
举例:
-
Good:
day_one
day_1
-
Bad:
first_day_of_the_month
DayOne
dayone
djm1
尽可能避免使用现有函数和变量的名称
举例:
- Bad:
{r}
T <- FALSE
c <- 10
mean <- function(x) sum(x)
Syntax 语法
1、Spacing 间距
在所有中缀运算符( =
、 +
、 -
、 <-
等)周围放置空格。
同样的规则也适用于在函数调用中使用 =
。
在逗号后面一定要加空格,而且不要在逗号之前加空格。
举例:
- Good
{r}
average <- mean(feet / 12 + inches, na.rm = TRUE)
- Bad
{r}
average<-mean(feet/12+inches,na.rm=TRUE)
有一个小的例外: :
、 ::
和 :::
周围不需要空格
举例:
- Good
{r}
x <- 1:10
base::get
- Bad
{r}
x <- 1 : 10
base :: get
在左括号前加一个空格,函数调用除外。
举例:
- Good
{r}
if (debug) do(x)
plot(x, y)
- Bad
{r}
if(debug)do(x)
plot (x, y)
额外间距(即,行中有多个空格),
如果它能改善等号或赋值的对齐 <-
,则可以
{r}
list(
total = a + b + c,
mean = (a + b + c) / n
)
不要在括号或方括号中的代码周围放置空格
(除非有逗号,这种情况见上文)
举例:
- Good
{r}
if (debug) do(x)
diamonds[5, ]
- Bad
{r}
if ( debug ) do(x) # debug旁边不要留空格
x[1, ] # 逗号后面不要留空格
x[1 ,] # 数字和逗号之间也不要有空格
2、Curly braces 花括号 {}
一个左花括号不应该在它自己的一行上,应该总是跟一个新的一行。
右花括号应该总是在自己的一行上,除非后面跟着 else
。
始终将代码放在花括号内。
举例:
- Good
{r}
if (y < 0 && debug) {
message("Y is negative")
}
if (y == 0) {
log(x)
} else {
y ^ x
}
- Bad
{r}
if (y < 0 && debug)
message("Y is negative")
if (y == 0) {
log(x)
}
else {
y ^ x
}
在同一行上留下非常简短的语句是可以的
{r}
if (y < 0 && debug) message("Y is negative")
3、Line length 长度
尽量将代码限制在每行80个字符。
这适合舒适的打印页面与合理大小的字体。
如果您发现自己的空间不足,应该将一些工作封装在单独的函数中。
4、Indentation 压缩
缩进代码时,使用两个空格space
。
永远不要使用制表符tab
或混合制表符和空格。
唯一的例外是,如果函数定义运行在多行上。
在这种情况下,将第二行重定向到定义开始的位置:
{r}
long_function_name <- function(a = "a long argument",
b = "another argument",
c = "another long argument") {
# As usual code is indented by two spaces.
}
5、Assignment 赋值
使用 <-
而不是 =