前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >40. R 茶话会 (八:优秀的R 使用者,优秀的代码习惯)

40. R 茶话会 (八:优秀的R 使用者,优秀的代码习惯)

作者头像
北野茶缸子
发布2021-12-17 09:18:22
2100
发布2021-12-17 09:18:22
举报
文章被收录于专栏:北野茶缸子的专栏

一个好的代码,不仅应该具备较好的可执行性,还应该有较好的可阅读性。

这样,以便于下一个使用者使用你的代码(修改你的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 结尾,需要具有一定的命名意义。我们可以利用数字,将不同的脚本文件按照一定顺序(流程)对其进行整理:

代码语言:javascript
复制
# Good
fit-models.R
utility-functions.R

0-download.R
1-parse.R
2-explore.R

# Bad
foo.r
stuff.r

变量名

无论是变量还是函数,都应该尽量使用小写字符对其定义。我们可以使用_ 来分隔名称,并尽量用名词定义变量,动词定义函数(执行某种动作):并且,我们的命名需要尽量避免与内置函数等重名。

代码语言:javascript
复制
# Good
day_one
day_1

# Bad
T <- FALSE
c <- 10
mean <- function(x) sum(x)

2. 语法

空格

R 要求我们合理的将符号和变量字符隔开,并且空格需要后置于字符串,且不能前置于字符串。

代码语言:javascript
复制
# Good
average <- mean(feet / 12 + inches, na.rm = TRUE)

# Bad
average<-mean(feet/12+inches,na.rm=TRUE)

但有一个特例,当我们使用 :, :: and ::: 的时候,不需要使用空格:

代码语言:javascript
复制
# Good
x <- 1:10
base::get

# Bad
x <- 1 : 10
base :: get

如果括号,则在括号的两侧也需要加上空格,但括号中的字符不需要被分开:

代码语言:javascript
复制
# 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:

代码语言:javascript
复制
# 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
}

如果条件或从句只有一句,可以省去括号:

代码语言:javascript
复制
if (y < 0 && debug) message("Y is negative")
if (y == 0) log(x)

代码长度

通常来说,一行代码应该限制在80个字符以内,但当我们的屏幕大或小的时候,应该进行适当调整,以使用换行进行分隔,R会帮我们识别。以下只是一个例子:

代码语言:javascript
复制
> 1 + 
+ 2
[1] 3

3. 赋值

使用 <- 而非 = 。= 在传参数时使用。

4. 组织与注释

使用# 注释,注释文字与# 保持空格,使用 --- 使代码区块化(Rstudio 的script 可以折叠):

代码语言:javascript
复制
# Load data ---------------------------

# Plot data ---------------------------

ps:推荐你可以去学习一下Rmarkdown~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 命名
    • 文件名
      • 变量名
      • 2. 语法
        • 空格
          • 缩进
            • 代码长度
            • 3. 赋值
            • 4. 组织与注释
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档