编码风格是开发人员的偏好,因此没有“正确”的编码样式,但在团队合作中, 需要行成统一的编码风格,以便团队中的其他人理解。尽管没有官方的样式指南,R仍然可以有一个“非正式”的约定俗成的编码规范。 在本文中,您将学习这些“非正式”规则,它们的偏差以及最常见的样式。

目录

一、命名

1.命名文件

2.命名变量

3.命名函数

二、句法

1. 页面长度

2.空格 

3.大括号

4.缩进

5.新行

6.注释

其他

References


一、命名

1.命名文件

  • 文件名应该以.R为后缀
# Good
  read.R

  # Bad 
  read
  • 文件名应该有实际含义,最好小写
# Good 
  model.R
    
  # Bad
  Untitled1.R
  • 使用有实际含义的动词
# Good 
  validate-vbm.R
    
  # Bad
  regression.R

 

2.命名变量

变量名称尽可能地短

# Good 
  fit_rt
  split_1
  imdb_page
    
  # Bad
  fit_regression_tree
  cross_validation_split_one
  foo

变量名称应该小写

# Good 
  event
    
  # Bad 
  Event

使用下划线分割变量名,不要用“.”分割

# Good 
  event_window
    
  # Bad 
  event.window
  EventWindow

不要使用已有的函数或变量命名

# Bad
  T <- 10 # T is a shortcut of TRUE in R
  c <- "constant"

3.命名函数

函数名称应该为动词

# Good
  add()
    
  # Bad
  addition()

用下划线分割函数名

# Good 
  bw_test()
    
  # Bad
  bw.test()

二、句法

1. 页面长度

行的最大长度限制为80个字符

R语言使用变量作为函数的输入 r语言中变量命名规则_缩进

2.空格 

在所有二进制运算符周围放置空格(=,*,+,<-,==,%%等)

# Good 
  x == y
  a <- a ^ 2 + 1
    
  # Bad
  x==y
  a<-a^2+1

$,@及::等前不需要空格

# Good 
  car$cyl
  dplyr::select
  1:10
    
  # Bad
  car $cyl
  dplyr:: select
  1: 10

逗号前需要空格

# Good 
  mtcars[, "cyl"]
  mtcars[1, ]
  mean(x = c(1, NA, 2), na.rm = TRUE)
    
  # Bad
  mtcars[,"cyl"]
  mtcars[1 ,]
  mean(x = c(1, NA, 2),na.rm = TRUE)

除函数调用外,在左括号前使用空格

# Good 
  for (element in element_list)
  if (grade == 5.5)
  sum(1:10)
    
  # Bad
  for(element in element_list)
  if(grade == 5.5)
  sum (1:10)

括号或方括号中的代码之间没有空格

# Good 
  if (debug) message("debug mode")
  species["tiger", ]
    
  # Bad
  if ( debug ) message("debug mode")
  species[ "tiger" ,]

3.大括号

左大括号开头绝对不能单行,而后总是换行

# Good 
  if (is_used) {
      # do something
  }
    
  if (is_used) {
      # do something
  } else {
      # do something else
  }
    
  # Bad
  if (is_used)
  {
      # do something
  }
    
  if (is_used) { # do something }
  else { # do something else }

右大括号应始终沿自己的行,除非后面紧跟其他行。

# Good 
  if (is_used) {
      # do something
  } else {
      # do something else
  }
    
  # Bad
  if (is_used) {
      # do something
  }
  else {
      # do something else 
  }
  • 始终在花括号内缩进代码(请参阅下一节)
# Good

if (is_used) {

# do something

# and then something else

}

# Bad

if (is_used) {

# do something

# and then something else

}
  • 如果if后的语句非常少,可以直接跟在后面
# Good

if (is_used) return(rval)

4.缩进

 

  • 切忌无缩进或缩进与空格混用
  • 快捷键Ctrl+I

5.新行

  • 通常,函数定义不适合一行。 在这种情况下,应从左括号开始将过多的参数移到新行。
long_function_name <- function(arg1, arg2, arg3, arg4,

long_argument_name1 = TRUE)

 

  • 如果参数扩展到两行以上,则每个参数应放在单独的行上。
long_function_name <- function(long_argument_name1 = c("value1", "value2"),

long_argument_name2 = TRUE,

long_argument_name3 = NULL,

long_argument_name4 = FALSE)
  • 对于函数调用也是如此:如果只有两行就足够了,则多余的参数应缩进右括号所在的位置。
plot(table(rpois(100, 5)), type = "h", col = "red", lwd = 10,

main = "rpois(100, lambda = 5)")
  • 否则,每个参数都可以进入单独的行,从左括号后的新行开始。
list(

mean = mean(x),

sd = sd(x),

var = var(x),

min = min(x),

max = max(x),

median = median(x)

)
  • 如果if语句中的条件扩展为多行,则每个条件都应以逻辑运算符结尾,而不是以它开头。
# Good

if (some_very_long_name_1 == 1 &&

some_very_long_name_2 == 1 ||

some_very_long_name_3 %in% some_very_long_name_4)

# Bad

if (some_very_long_name_1 == 1

&& some_very_long_name_2 == 1

|| some_very_long_name_3 %in% some_very_long_name_4)

 

6.注释

  • 注释代码,以#开头 ,增强代码可读性
    # This is a comment.
  • 评论应说明原因,而不是内容。 注释不应用简单的语言来复制代码,而应解释命令的总体意图。
# Good

# define iterator

i <- 1

# Bad

# set i to 1

i <- 1
  • 简短注释可以与代码行放在同一行
plot(price, weight) # plot a scatter chart of price and weight
  • 注释的切换快捷键 Command+Shift+C

其他

  • 使用 <-而不是=进行赋值
  • 使用library()而不是require()进行包的加载
# Good

library("dplyr")

# Bad

require(dplyr)
  • 在函数调用中,可以通过位置,完整名称或部分名称来指定参数。 永远不要用部分名称指定,也不要按位置和完整名称混合。
# Good

mean(x, na.rm = TRUE)

rnorm(10, 0.2, 0.3)

# Bad

mean(x, na = TRUE)

rnorm(mean = 0.2, 10, 0.3)
  • 开发软件包时,请按名称指定参数,必需的参数(无默认值)应位于第一个,然后是可选参数。
# Good

raise_to_power(x, power = 2.7)

# Bad

raise_to_power(power = 2.7, x)
  •  ...符号应该要么在开头要么在结尾
# Good

standardize(..., scale = TRUE, center = TRUE)

save_chart(chart, file, width, height, ...)

# Bad

standardize(scale = TRUE, ..., center = TRUE)

save_chart(chart, ..., file, width, height)
  • 开发软件包时,请指定每个使用的函数的名称空间,除非它来自基础软件包。
  • 每行不要放置超过一个语句(命令)。 不要使用分号作为命令的终止符。
# Good

x <- 1

x <- x + 1

# Bad

x <- 1; x <- x + 1
  • 避免使用setwd("/Users/irudnyts/path/that/only/I/have"),使用here包中的here::here()函数,以便其他人重复你的结果
  • 避免使用rm(list = ls()),该语句从全局环境中删除所有对象,重新开始R
  • 关键快捷键Command+Shift+A可以重排代码块,加入空格和缩进,但不要过度使用!还是需要自己练习

References