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

使用 <-

而不是 =

相关推荐
oe101916 小时前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(下)
人工智能·笔记·语言模型·agent
B站计算机毕业设计之家16 小时前
Python招聘数据分析可视化系统 Boss直聘数据 selenium爬虫 Flask框架 数据清洗(附源码)✅
爬虫·python·selenium·机器学习·数据分析·flask
雪碧聊技术16 小时前
爬虫是什么?
大数据·爬虫·python·数据分析
冷雨夜中漫步16 小时前
高级系统架构师笔记——系统质量属性与架构评估(1)软件系统质量属性
笔记·架构·系统架构
oe101917 小时前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(中)
人工智能·笔记·语言模型·agent开发
算法与编程之美17 小时前
探索不同的优化器对分类精度的影响和卷积层的输入输出的shape的计算公式
人工智能·深度学习·机器学习·分类·数据挖掘
许长安17 小时前
C++中指针和引用的区别
c++·经验分享·笔记
asyxchenchong88818 小时前
OpenLCA、GREET、R语言的生命周期评价方法、模型构建
开发语言·r语言
摇滚侠18 小时前
Spring Boot3零基础教程,StreamAPI 介绍,笔记98
java·spring boot·笔记
没有梦想的咸鱼185-1037-166318 小时前
【生命周期评价(LCA)】基于OpenLCA、GREET、R语言的生命周期评价方法、模型构建
开发语言·数据分析·r语言