炼数成金 门户 商业智能 R语言 查看内容

R语言编码规范 · 谷歌发布

2017-7-31 14:54| 发布者: 炼数成金_小数| 查看: 21207| 评论: 0|来自: 统计咨询
摘要: R是一门主要用于统计分析和作图的高级编程语言。制定本规范的目的是让R代码更容易被理解、分享和验证。以下的规范是谷歌的R用户社区共同讨论拟定的。标识符包括变量名、函数名、常数变量名等。不要使用下划线(_)或连 ...
编程 R语言 统计分析
本文译自《Google's R Style Guide》,原文链接:https://google.github.io/styleguide/Rguide.xml?from=timeline&isappinstalled=0

R是一门主要用于统计分析和作图的高级编程语言。制定本规范的目的是让R代码更容易被理解、分享和验证。以下的规范是谷歌的R用户社区共同讨论拟定的。

目录
文件名:以.R结尾
标识符:变量名(variable.name或者variableName)、函数名(FunctionName)、常数变量名(kConstantName)
行长度:较大80个字符
缩进:两个空格,不使用制表符(tab)
空格
大括号:开始在同一行,结束独立一行
else函数:两侧用大括号
赋值:用<-,不用=
分号:不使用
总体布局
注释规范:所有的注释以#和一个空格开始,句中注释前需要两个空格
函数的定义和应用
函数说明
TODO风格:TODO(用户名)
attach函数:避免使用
自编函数:报错的地方应该使用stop()
对象和方法:尽可能避免S4类对象,不能将S3类和S4类混用

1.文件名
文件名应该以.R结束,而且应该具有意义。
GOOD: predict_ad_revenue.R
BAD: foo.R

2.标识符
标识符包括变量名、函数名、常数变量名等。不要使用下划线(_)或连字符(-)。
变量名,variable.name较好的,variableName也可以接受
GOOD: avg.clicks
OK: avgClicks
BAD: avg_Clicks
函数名,尽量使用动词形式,除非在创建一个类的对象时,如函数lm()
GOOD: CalculateAvgClicks
BAD: calculate_avg_clicks, calculateAvgClicks
常数变量名,应与函数命名类似,并且以字母k开头

3.行长度
每行不超过80个字符。

4.缩进
使用两个空格进行缩进,不要使用制表符(tab),也不能混用空格与制表符。除非在断行时,为了对齐首字母而使用了制表符。

5.空格
在所有的二元运算符(=, +, -, <-等等)两侧使用空格。逗号前不加空格,后要加空格。除非在函数中设定参数使用等号的时候,可以不加空格。
GOOD:
tab.prior <- table(df[df$days.from.opt < 0, "campaign.id"])
total <- sum(x[, 1])
total <- sum(x[1, ])

BAD:
tab.prior <- table(df[df$days.from.opt<0, "campaign.id"])  # 小于号两侧没有空格
tab.prior <- table(df[df$days.from.opt < 0,"campaign.id"])  # 逗号后面没有空格
tab.prior<- table(df[df$days.from.opt < 0, "campaign.id"])  # 赋值号(<-)前面没有空格
tab.prior<-table(df[df$days.from.opt < 0, "campaign.id"])  # 赋值号(<-)两侧没有空格
total <- sum(x[,1])  # 逗号后面没有空格
total <- sum(x[ ,1])  # 逗号后面没有空格,前面多了空格

在小括号左侧添加空格,除非在应用函数的时候。不要在小阔内两端侧使用空格。
GOOD: if (debug)
BAD: if(debug), if ( debug )

为了对齐格式可以使用更多的空格。

6.大括号
GOOD:
if (is.null(ylim)) {
  ylim <- c(0, 0.06)
}

GOOD:
if (is.null(ylim))
  ylim <- c(0, 0.06)

BAD:
if (is.null(ylim)) ylim <- c(0, 0.06) 
if (is.null(ylim)) {ylim <- c(0, 0.06)}

7.else函数
GOOD:
if (condition) {
  one or more lines
} else {
  one or more lines
}

BAD:
if (condition) {
  one or more lines
}
else {
  one or more lines
}

BAD:
if (condition)
  one line
else
  one line

8.赋值
GOOD: x <- 5
BAD: x = 5

9.分号
不要使用分号来结束语句,或者为了让每行多写几个语句而使用分号。

10.总体布局
按照如下顺序组织语言:
版权说明
作者说明
文件描述说明,包括程序的目的,输入和输出等
source()和library()
函数定义
执行语句说明

测试文件应该另立文件,并以originalfilename_test.R命名。

11.注释规范
所有的注释以#和一个空格开始,句中注释前需要两个空格。

12.函数定义和应用
定义函数时,应该先把没有默认值的参数列在前面。断行时应注意等号两侧的完整性。

13.函数说明
应该在函数定义的首行下面增加注释说明,说明应该包括一句话的描述说明、各参数的定义(以Args开始)、输出值的描述(以Returns开始)。例子如下:

14.TODO风格
编程时通篇使用TODO风格,也就是要明确描述所编写程序的目的。

15.attach函数
尽量避免使用attach函数,因为它容易导致错误的发生。

16.自编函数
在报错的地方应该使用stop()。

17.对象与方法
S语言包括S3和S4两类对象系统,都可以在R语言中使用。S3类更具互动性和灵活性,而S4类则更加正式和严格。编程中尽量使用S3类,S4类主要是在引用C++代码时使用。避免同时使用两种类。想了解两类具体内容,请自行查看第3篇参考文献。

写在最后  
除非有充分的理由,所有R语言用户应该遵循上面描述的编码规范。见贤思齐,见不贤而内自省也。规范一旦建立,大家将会关注你的代码说了什么,而不会花更多的时间在研究你的代码是怎么说的。罢了,写代码的文章已经够多了,而代码本身则是更有趣的。祝各位R语言用户玩得高兴!

参考文献
http://www.maths.lth.se/help/R/RCC/ - R Coding Conventions
http://ess.r-project.org/ - For emacs users. This runs R in your emacs and has an emacs mode
Thomas Lumley's "Programmer's Niche: A Simple Class, in S3 and S4" in R News 4/1, 2004, pgs. 33 - 36: https://cran.r-project.org/doc/Rnews/Rnews_2004-1.pdf

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967
1

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

  GMT+8, 2017-11-24 17:03 , Processed in 0.145977 second(s), 24 queries .