R是一种开源编程语言,被广泛用作统计软件和数据分析工具。 R 通常带有命令行界面。 R 可用于广泛使用的平台,如 Windows、Linux 和 macOS。此外, R 编程语言是最新的尖端工具。软件工程不仅仅是学习一门语言和构建一些软件。作为软件工程师或软件开发人员,您应该编写好的软件。好的软件可以通过阅读项目中编写的一些代码来判断。
如果代码易于理解且易于更改,那么它绝对是好软件,开发人员喜欢在此方面工作。对于初学者 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. 对象名称
“There are only two hard things in Computer Science: cache invalidation and naming things.”
— Phil Karlton
变量名和函数名必须小写。使用下划线“_”分隔名称中的单词。一般来说,变量名应该是名词,函数名应该是动词。请参考以下示例代码片段:
良好做法:
电阻
# 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
}