R语言——编程规范

Posted by Longfei Han on March 26, 2015

预计阅读时间: 19分钟

总计阅读次数:

R语言编程规范

R语言编程规范(R Coding Conventions)(RCC)是伯克利(Berkeley)大学Henrik Bengtsson教授撰写的,旨在规范R语言编程,使程序更具可读性,本文既针对RCC中的重点进行总结和梳理。

1. 变量命名规范

  1. 变量或者类命名中不带.,但可以作为前缀;e.g. .MachinefilePrefix而不是File.Prefix
  2. 变量或者类命名最好是名词或名词组合,且各名词首字母大写(建议第一个名词首字母不需要大写),e.g. fileName而不是filename
  3. 常量用全大写字母表示,e.g. MAX_ITERATIONSCOLOR.RED
  4. 变量命名尽量少用缩写,e.g. fileName而不是flNm,但某些约定俗成的词最好还是保留缩写,但首字母大写外,其余都用小写,Html而不是HTML,也不是HyperTextMarkupLanguage
  5. 临时变量要尽量短,让读者明确该变量仅在某几行代码内有效,e.g. iii而不是iterationNumber
  6. 变量命名要有可读性,e.g. okButtonmainWindowleftScrollbar而不是Flagvariable
  7. 变量命名时要突出某些变量的类型,如矩阵、列表,e.g. 如果matrixElement代表矩阵的某一个元素,需要使用matrixElementList代表矩阵元素列表,而不是使用matrixElements表示;
  8. 变量如果表示物体或者实体数量时,尽量使用nXXXX表示,e.g. nPointsnLines代表点和线的数量,而不是points
  9. 变量如果表示实体的编号时,尽量使用xxxNo表示,e.g. tableNoemployeeNo
  10. 变量赋值使用<-操作符,不要使用_或者 ->,可以使用=

2. 函数命名

  1. 函数命名要注意减少复杂度,e.g. setTopic(topic)而不是setTopic(value)getLength(line)而不是getLineLength(line)
  2. 如果函数返回值为布尔型,最好把is作为前缀,e.g. isSet()isVisible()isOpen()而不是isFlag()whetherOpen(),也可用hascanshould代替is;但不要用逻辑关系词note.g. isNotOpen()
  3. 如果函数需要一定时间遍历或者计算某个变量的值,最好使用find作为前缀,e.g. findNearestVertex(vertex)findMinElement(matrix);当不需要计算即可直接获得的可以使用get作为前缀,e.g. getDictionary(Dictionary)getValue(value)
  4. 如果函数用于初始化,则使用initialize作为前缀,e.g. initializeFontSet(printer)而不是initFontSet(printer)
  5. 如果某两个函数有相关性,尽量使用对称的动词作为前缀,减少命名复杂度,e.g. getName(name) v.s. setName(name)addStudent(student) v.s. removeStudent(student),或create/destroystart/stopbegin/endnext/previous
  6. 函数命名不要使用缩写,不要用cmd代替command,或用cp代替copy等,e.g. computeAverage()而不是compAvg()

3. 文件布局和程序语句

  1. 文件命名结尾以.R为后缀,不要使用.r或者.s
  2. 代码列数控制在80列以内,换行可以发生在逗号、操作符后;
  3. 循环控制变量for()中最好使用seq()函数,如果变量\(x\)为空,则使用1:length(x)seq(length(x))会造成错误的循环从1:0,e.g.

     #推荐方式
     for (kk in seq(along=x)){
       :
     }
     #不推荐方式1
     for (kk in 1:length(x)){
       :
     }
     #不推荐方式2
     for (kk in seq(length(x))){
       :
     }
     
  4. 条件判断语句if()中尽量避免直接使用判断表达式,可以将结果赋值给变量, e.g.

     #推荐方式
     isFinished <- (elementNo < 0) || (elementNo > maxElement);
     isRepeatedEntry <- (elementNo == lastElement);
     if (isFinished || isRepeatedEntry){
       :
     }
     #不推荐方式
     if ((elementNo < 0) || (elementNo > maxElement) ||
       (elementNo == lastElement)) {
       :
     }
     
  5. 条件判断语句尽量做好出现错误的提示,e.g.

     isError <readFile(fileName);
     if (!isError) {
       :
     } 
     else {
       :
     }
     
  6. 每个操作符与变量间最好有一个空格,突出显示各操作符和变量,e.g. sum <- (a + b) * 10.0而不是sum<-(a+b)*10

4. 参考文献

[1] Henrik Bengtsson, R Coding Conventions (RCC): Version 0.9, Dept of Statistics, University of California, Berkeley, US, January 2009.

[2] R Development Core Team, R Language Definition, ISBN 3-901167-56-0.

[3] Java Code Conventions.

[4] Java Programming Style Guidelines v3.0, Geotechnical Software Services.

[5] R Development Core Team, Writing R Extensions, ISBN 3-901167-54-4.

[6] Henrik Bengtsson, Safely creating S3 generic functions using setGenericS3(), Division for Mathematical Statistics, Centre for Mathematical Sciences, Lund University, Sweden, 2002.


blog comments powered by Disqus