第 1 章 R语言编程风格指南
好的编程风格(程序编写格式)就像正确使用标点符号。没有他也可以,但是他会让你编写的程序易于理解。建议参考Google R语言编程风格指南(https://nanx.me/rstyle/)。虽然你的代码只有一个作者,但通常有许多读者,所以好的风格是很重要的。当你和他人合作编写代码时,尤其要注意编程风格,但是要注意没有一种风格说是最优的,但是你们需要统一。YiHuiXie编写的formatR添加包使得整理格式混乱的代码变得容易,但是不能解决一切问题。
1.1 符号和名字
1.1.1 文件名
文件名应该有一定的意义,并且以.R结尾
#good
fit-model.R
utility-function.R
#bad
foo.r
stuff.r
如果文件需要按照顺序执行,那么做好在命名时加上数字前缀
0-download.R
1-parse.R
2-explore.R
1.1.2 对象名
在计算机科学中有两件非常难的事情,缓存失效和对象命名。变量和函数名应该是小写字母,使用下划线(_)将名字中的单词分开。通常变量名应该是名词,函数名应该是动词。追求简洁而有意义的名字。
#good
day_one
day_1
#bad
first_day_of_month
DayOne
dayone
djm1
1.2 语法
1.2.1 空格
所有中缀运算符(=,+,-,<-等)的两边使用空格。要在逗号的后面而非前面加上空格
#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)
x[1,]
x[1, ]
1.2.2 大括号
大括号的左半边不能独占一行,它后边也应该新起一行,右半边应该独占一行或它的后边是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 message")
1.2.3 行的长度
努力使每行代码不超过80个字符,如果你的代码超过了这个长度,这说明你应该将一些功能打包成独立的函数。
1.2.4 缩进
缩进代码使用两个空格,不要使用制表符(tab)或者制表符加空格。唯一的例外是,如果一个函数定义跨越了很多行。这种情况下,第二行要缩进到定义开始的地方:
long_function_name <- function (a = "a long argument",
b = "another argument",
c = "another long argument") {
# As usual code is idented by two spaces.
}
1.2.5 赋值
赋值时使用 <- 而不是 =。
#good
x <- 5
#bad
x = 5
1.3 结构
注释指南
对代码进行注释,每行的注释都应该以注释符和一个空格开始: #。 注释应该解释为什么。而不是是什么。
使用由-和=构成的注释行将文件分割成容易理解的段落(块)
# Load Data --------------------------------------------
# Plot Data --------------------------------------------
好的程序猿一定有自己的编程风格,并且在团队中能够快速的调整使得编程风格达成一致,所以与其他人合作意味着你可能需要对自己喜好的某些风格做出让步。