一个好的代码,不仅应该具备较好的可执行性,还应该有较好的可阅读性。
这样,以便于下一个使用者使用你的代码(修改你的bug~
这里我们参考Hadley Wickham 大神给的“良好代码风格”,http://adv-r.had.co.nz/Style.html。它基于google 的R style:https://google.github.io/styleguide/Rguide.xml
作者也推荐了相关的R包,比如formatR,可以帮助我们整理不太“整洁”的代码。
1. 命名
文件名
R 的脚本文件以.R
结尾,需要具有一定的命名意义。
我们可以利用数字,将不同的脚本文件按照一定顺序(流程)对其进行整理:
# Good
fit-models.R
utility-functions.R
0-download.R
1-parse.R
2-explore.R
# Bad
foo.r
stuff.r
变量名
无论是变量还是函数,都应该尽量使用小写字符对其定义。我们可以使用<font style="color:#333333;background-color:#FAFAFA;">_</font>
来分隔名称,并尽量用名词定义变量,动词定义函数(执行某种动作):
# Good
day_one
day_1
# Bad
T <- FALSE
c <- 10
mean <- function(x) sum(x)
2. 语法
空格
R 要求我们合理的将符号和变量字符隔开,并且空格需要后置于字符串,且不能前置于字符串。
# Good
average <- mean(feet / 12 + inches, na.rm = TRUE)
# Bad
average<-mean(feet/12+inches,na.rm=TRUE)
但有一个特例,当我们使用 :, :: and ::: 的时候,不需要使用空格:
# 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)
# 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")
if (y == 0) log(x)
代码长度
通常来说,一行代码应该限制在80个字符以内,但当我们的屏幕大或小的时候,应该进行适当调整,以使用换行进行分隔,R会帮我们识别。以下只是一个例子:
> 1 +
+ 2
[1] 3
3. 赋值
使用 <-
而非 =
。= 在传参数时使用。
4. 组织与注释
使用# 注释,注释文字与# 保持空格,使用 ---
使代码区块化(Rstudio 的script 可以折叠):
# Load data ---------------------------
# Plot data ---------------------------
ps:可以学学Rmarkdown~