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 赋值

使用 <-

而不是 =

相关推荐
AOwhisky14 小时前
Ceph系列第二期:Ceph集群部署实战(cephadm)
linux·运维·笔记·分布式·ceph·云计算·存储
数智工坊14 小时前
《计算机双目立体视觉》高宏伟:第5章-三维重建
笔记·数码相机
还是瓜瓜好14 小时前
CRC(循环冗余校验)笔记
笔记
问心无愧051314 小时前
ctf show web入门259
android·前端·笔记
咸甜适中14 小时前
rust语言学习笔记Trait(十三)Borrow、BorrowMut(借用)
笔记·学习·rust
星轨初途14 小时前
【C++ 进阶】list 核心机制解析及 vector 巅峰对决
开发语言·数据结构·c++·经验分享·笔记·list
鹏北海-RemHusband14 小时前
Go 包管理笔记 — 面向 JS/TS 前端开发者
笔记·golang
Chloeis Syntax14 小时前
JavaEE初阶学习日记(3)---网络初认识
java·网络·笔记·学习
智者知已应修善业14 小时前
【proteus仿真CD4511抢答器4路】2024-5-13
驱动开发·经验分享·笔记·硬件架构·proteus·硬件工程
kinl201814 小时前
cs236_note1 (lec5-lec6) VAEs
笔记