R语言 写代码的正确姿势

《Advanced R》 style

良好的编码风格就像使用正确的标点符号。

没有它你也能应付,但它确实让事情更容易阅读。

与标点符号的风格一样,有许多可能的变化。

好的风格很重要。

因为虽然你的代码只有一个作者,但它通常会有多个读者。

当你和别人一起写代码的时候尤其如此。

在这种情况下,最好事先就一个共同的风格达成一致。

Notation and naming 符号和命名

1、File names 文件名

  • 是有意义的
  • 并以 .R 结尾的

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

0-download.R

1-parse.R

2-explore.R

2、Object names 对象名称

变量(variable)名和函数(function)名应该是小写。

使用下划线( _ )分隔名称中的单词。

一般来说,变量名应该是名词;

函数名应该是动词。
求其名,求其义

举例:

  • Good:

    day_one

    day_1

  • Bad:

    first_day_of_the_month

    DayOne

    dayone

    djm1

尽可能避免使用现有函数和变量的名称

举例:

  • Bad:
{r} 复制代码
T <- FALSE
c <- 10
mean <- function(x) sum(x)

Syntax 语法

1、Spacing 间距

在所有中缀运算符( =+-<- 等)周围放置空格。

同样的规则也适用于在函数调用中使用 =

在逗号后面一定要加空格,而且不要在逗号之前加空格。

举例:

  • Good
{r} 复制代码
average <- mean(feet / 12 + inches, na.rm = TRUE)
  • Bad
{r} 复制代码
average<-mean(feet/12+inches,na.rm=TRUE)

有一个小的例外: :::::: 周围不需要空格

举例:

  • Good
{r} 复制代码
x <- 1:10
base::get
  • Bad
{r} 复制代码
x <- 1 : 10
base :: get

在左括号前加一个空格,函数调用除外。

举例:

  • Good
{r} 复制代码
if (debug) do(x)
plot(x, y)
  • Bad
{r} 复制代码
if(debug)do(x)
plot (x, y)

额外间距(即,行中有多个空格),

如果它能改善等号或赋值的对齐 <- ,则可以

{r} 复制代码
list(
  total = a + b + c, 
  mean  = (a + b + c) / n
)

不要在括号或方括号中的代码周围放置空格
(除非有逗号,这种情况见上文)

举例:

  • Good
{r} 复制代码
if (debug) do(x)
diamonds[5, ]
  • Bad
{r} 复制代码
if ( debug ) do(x)  # debug旁边不要留空格
x[1, ]   # 逗号后面不要留空格
x[1 ,]  # 数字和逗号之间也不要有空格

2、Curly braces 花括号 {}

一个左花括号不应该在它自己的一行上,应该总是跟一个新的一行。

右花括号应该总是在自己的一行上,除非后面跟着 else

始终将代码放在花括号内。

举例:

  • Good
{r} 复制代码
if (y < 0 && debug) {
  message("Y is negative")
}

if (y == 0) {
  log(x)
} else {
  y ^ x
}
  • Bad
{r} 复制代码
if (y < 0 && debug)
message("Y is negative")

if (y == 0) {
  log(x)
} 
else {
  y ^ x
}

在同一行上留下非常简短的语句是可以的

{r} 复制代码
if (y < 0 && debug) message("Y is negative")

3、Line length 长度

尽量将代码限制在每行80个字符。

这适合舒适的打印页面与合理大小的字体。

如果您发现自己的空间不足,应该将一些工作封装在单独的函数中。

4、Indentation 压缩

缩进代码时,使用两个空格space

永远不要使用制表符tab或混合制表符和空格。

唯一的例外是,如果函数定义运行在多行上。

在这种情况下,将第二行重定向到定义开始的位置:

{r} 复制代码
long_function_name <- function(a = "a long argument", 
                               b = "another argument",
                               c = "another long argument") {
  # As usual code is indented by two spaces.
}

5、Assignment 赋值

使用 <-

而不是 =

相关推荐
UQI-LIUWJ2 小时前
李宏毅LLM笔记: AI Agent
人工智能·笔记
ouliten2 小时前
cuda编程笔记(6)--流
笔记
Love__Tay2 小时前
笔记/云计算基础
笔记·学习·云计算
安替-AnTi2 小时前
基于 React 和 TypeScript 搭建的机器学米其林餐厅数据分析项目
react.js·typescript·数据分析·毕设·米其林
李元豪3 小时前
【行云流水ai笔记】粗粒度控制:推荐CTRL、GeDi 细粒度/多属性控制:推荐TOLE、GPT-4RL
人工智能·笔记
特种加菲猫5 小时前
指尖上的魔法:优雅高效的Linux命令手册
linux·笔记
wuxuanok5 小时前
Web后端开发-分层解耦
java·笔记·后端·学习
wuxuanok6 小时前
Web后端开发-请求响应
java·开发语言·笔记·学习
诗句藏于尽头7 小时前
内网使用rustdesk搭建远程桌面详细版
笔记
蜡笔小电芯7 小时前
【C语言】指针与回调机制学习笔记
c语言·笔记·学习