📜  R 编程的 8 个编码风格提示

📅  最后修改于: 2021-10-22 03:34:41             🧑  作者: Mango

R是一种开源编程语言,被广泛用作统计软件和数据分析工具。 R 通常带有命令行界面。 R 可用于广泛使用的平台,如 Windows、Linux 和 macOS。此外, R 编程语言是最新的尖端工具。软件工程不仅仅是学习一门语言和构建一些软件。作为软件工程师或软件开发人员,您应该编写好的软件好的软件可以通过阅读项目中编写的一些代码来判断。

R 编程的 8 种编码风格提示

如果代码易于理解且易于更改,那么它绝对是好软件,开发人员喜欢在此方面工作。对于初学者 R 程序员,获得并开始使用良好的编码实践是一个好主意。 Google 和 R-guru Hadley Wickham 在 R 编码风格指南上有很好的技巧。该列表包含使用 R 编程时该做什么和不该做什么。因此,在本文中,我们将讨论六个编码风格技巧,以帮助您成为更好的 R 语言程序员。

1. 评论

开发人员使用注释来指定代码中一行的用途是很常见的事情。的确,注释对于解释代码的作用确实很有帮助,但它也需要对代码进行更多维护。有时它非常重要,例如……如果您正在处理需要解释某些行为的第三方API,则可以使用注释来解释代码,但不要在不需要的地方编写注释。所以在 R 编程中总是开始用注释符号 # 和一个空格注释一行。 Hadley Wickham 建议使用带有– 和 =的剩余注释行将文件分解为易于阅读的块。请参考以下示例代码片段:

R
# Read table ----------------------------------
# Read table ==================================


R
# Good Practice
x <- 10


R
# Bad Practice
x = 10


R
# Good Practice
fit-models.R
linear-regression.R


R
# Bad Practice
models.R
stuff.R


R
0-fit-models.R
1-linear-regression.R
2-neural-network.R


R
# Good Practice
number_of_students
get_price


R
# Bad Practice
GetPrice
getprice


R
# Good Practice
perimeter_of_rectangle = 2(length + width), na.rm = TRUE)


R
# Bad Practice
perimeter_of_rectangle=2(length+width),na.rm=TRUE)


R
# Good Practice
x <- 1:20
value::real


R
# Bad Practice
x <- 1 : 20
value :: real


R
# Good Practice
if (yes) do(x)
run(x, y)


R
# Bad Practice
if(yes)do(x)
run(x, y)


R
# Good Practice
student[1, ]


R
# Bad Practice
  
# Needs a space after the comma
student[1,]
  
# Put space after comma not before
student[1 ,]


R
# Good Practice
if (x > 0 && foo) {
  cat("X is positive")
}
  
if (x == 0) {
  log(a)
} else {
  a ^ x
}


R
# Bad Practice
  
if (x > 0 && foo)
cat("X is positive")
  
if (x == 0) {
  log(a)
} 
else {
  a ^ x
}


R
# Good Practice
if (x > 0 && foo) cat("X is positive")


R
# Good Practice
function_name <- function(a = "a long argument", 
                          b = "another argument",
                          c = "another long argument") {
  # As usual code is indented by two spaces
}


2. 分配

R 有一个不寻常的赋值运算符'<-‘ 而不是 ‘=’ 符号。因此,最好使用 ‘<-‘ 符号,而不是 ‘=’ 符号。请参考以下示例代码片段:

良好做法:

电阻

# Good Practice
x <- 10

不良做法:

电阻

# Bad Practice
x = 10

3. 文件名

文件名应该有意义并以‘.R’结尾。请参考以下示例代码片段:

良好做法:

电阻

# Good Practice
fit-models.R
linear-regression.R

不良做法:

电阻

# Bad Practice
models.R
stuff.R

如果文件需要按顺序运行,请在它们前面加上数字,如下所示:

电阻

0-fit-models.R
1-linear-regression.R
2-neural-network.R

4. 对象名称

变量名和函数名必须小写。使用下划线“_”分隔名称中的单词。一般来说,变量名应该是名词,函数名应该是动词。请参考以下示例代码片段:

良好做法:

电阻

# Good Practice
number_of_students
get_price

不良做法:

电阻

# Bad Practice
GetPrice
getprice

5. 间距

在所有中缀运算符( =、+、-、<- 等)周围放置一个空格。在函数调用中使用 = 时实现相同的规则。总是在逗号后放一个空格,之前不要。请参考以下示例代码片段:

良好做法:

电阻

# Good Practice
perimeter_of_rectangle = 2(length + width), na.rm = TRUE)

不良做法:

电阻

# Bad Practice
perimeter_of_rectangle=2(length+width),na.rm=TRUE)

这个规则有一个小例外,例如在:、:: 和 ::::不需要空格的情况下。请参考以下示例代码片段:

良好做法:

电阻

# Good Practice
x <- 1:20
value::real

不良做法:

电阻

# Bad Practice
x <- 1 : 20
value :: real

在左括号前放置一个空格,函数调用除外。请参考以下示例代码片段:

良好做法:

电阻

# Good Practice
if (yes) do(x)
run(x, y)

不良做法:

电阻

# Bad Practice
if(yes)do(x)
run(x, y)

除非有逗号,否则不要在括号或方括号中的代码周围放置空格。请参考以下示例代码片段:

良好做法:

电阻

# Good Practice
student[1, ]

不良做法:

电阻

# Bad Practice
  
# Needs a space after the comma
student[1,]
  
# Put space after comma not before
student[1 ,]

6. 花括号

左花括号永远不应该独占一行,并且应该总是跟在一个新行之后。一个结束的大括号应该总是在它自己的行上,除非它后面跟着 else。始终在花括号内缩进代码。请参考以下示例代码片段:

良好做法:

电阻

# Good Practice
if (x > 0 && foo) {
  cat("X is positive")
}
  
if (x == 0) {
  log(a)
} else {
  a ^ x
}

不良做法:

电阻

# Bad Practice
  
if (x > 0 && foo)
cat("X is positive")
  
if (x == 0) {
  log(a)
} 
else {
  a ^ x
}

在同一行上写很短的语句是可以的,如下所示:

电阻

# Good Practice
if (x > 0 && foo) cat("X is positive")

7. 线长

尝试将代码限制为每行 80 个字符。这可以舒适地打印在具有合理大小字体的打印页面上。

8. 缩进

缩进代码时,请使用两个空格。切勿使用制表符或混合制表符和空格。唯一的例外是函数定义在多行上运行。在这种情况下,将第二行缩进到定义开始的位置。请参考以下示例代码片段:

良好做法:

电阻

# Good Practice
function_name <- function(a = "a long argument", 
                          b = "another argument",
                          c = "another long argument") {
  # As usual code is indented by two spaces
}