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

使用 <-

而不是 =

相关推荐
聊点儿技术6 小时前
LLM数据采集如何突破AI反爬?——用IP数据接口实现进阶
人工智能·数据分析·产品运营·ip·电商·ip地址查询·ip数据接口
handler017 小时前
从零实现自动化构建:Linux Makefile 完全指南
linux·c++·笔记·学习·自动化
赵钰老师8 小时前
【结构方程模型SEM】最新基于R语言结构方程模型分析
开发语言·数据分析·r语言
Hello_Embed8 小时前
嵌入式上位机开发入门(二十六):将 MQTT 测试程序加入 APP 任务
网络·笔记·网络协议·tcp/ip·嵌入式
不会编程的懒洋洋8 小时前
C# Task async/await CancellationToken
笔记·c#·线程·面向对象·task·同步异步
vastsmile8 小时前
(R)26.04.23 hermes agent执行本地命令超级慢的原因
开发语言·elasticsearch·r语言
zhangrelay11 小时前
蓝桥云课五分钟-通关自动控制-octave
笔记·学习
Chuer_12 小时前
讲透财务Agent核心概念,深度拆解财务Agent应用趋势
大数据·数据库·安全·数据分析·甘特图
_李小白13 小时前
【AI大模型学习笔记之平台篇】第六篇:安卓开发AI工具介绍(Android CLI、Android Skill和Android Knowledge Base)
人工智能·笔记·学习
YaBingSec13 小时前
玄机靶场:供应链安全-供应链应急-Part2 通关笔记
java·笔记·安全