一个好的代码,不仅应该具备较好的可执行性,还应该有较好的可阅读性。
这样,以便于下一个使用者使用你的代码(修改你的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 结尾,需要具有一定的命名意义。
我们可以利用数字,将不同的脚本文件按照一定顺序(流程)对其进行整理:
# Goodfit-models.Rutility-functions.R0-download.R1-parse.R2-explore.R# Badfoo.rstuff.r
变量名
无论是变量还是函数,都应该尽量使用小写字符对其定义。我们可以使用<font style="color:#333333;background-color:#FAFAFA;">_</font> 来分隔名称,并尽量用名词定义变量,动词定义函数(执行某种动作):
# Goodday_oneday_1# BadT <- FALSEc <- 10mean <- function(x) sum(x)
2. 语法
空格
R 要求我们合理的将符号和变量字符隔开,并且空格需要后置于字符串,且不能前置于字符串。
# Goodaverage <- mean(feet / 12 + inches, na.rm = TRUE)# Badaverage<-mean(feet/12+inches,na.rm=TRUE)
但有一个特例,当我们使用 :, :: and ::: 的时候,不需要使用空格:
# Goodx <- 1:10base::get# Badx <- 1 : 10base :: get
如果括号,则在括号的两侧也需要加上空格,但括号中的字符不需要被分开:
# Goodif (debug) do(x)plot(x, y)# Badif(debug)do(x)plot (x, y)# Badif ( debug ) do(x) # No spaces around debugx[1,] # Needs a space after the commax[1 ,] # Space goes after comma not before
缩进
循环或条件下的从句需要进行缩进,且末尾括号需要单独一行,除非是跟着else:
# Goodif (y < 0 && debug) {message("Y is negative")}if (y == 0) {log(x)} else {y ^ x}# Badif (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~
