1. 文件命名

  • 文件的命名(File Names)
    文件的命名应该以.R为结尾,并且应该有意义(你要干什么)
    GOOD: predict_ad_revenue.R
    BAD: foo.R
  • 标志符(Identifiers)
    标志符的命名分为变量的命名函数的命名
    在标志三符中不要使用_和-。标志符的命名应该遵循一贯的原则。原则如下:
  • 变量的命名(variable.name):全部用小写字母,字(word)与字(word)之间应该用小黑点(.)隔开
    GOOD: avg.clicks
    BAD: avg_Clicks , avgClicks
  • 函数的命名(FunctionName):每一个字(word)的首个字符大写,字与字之间没有间隔.
    GOOD: CalculateAvgClicks
    BAD: calculate_avg_clicks , calculateAvgClicks
    每一个函数的命名要以动词开始(什么事)
    例外情况:当创建一个类的对象,构造器(constructor) 和类名应该保持一致。(所有的面向对象应该都适用)
  • 常量的命名(kConstantName):和函数命名方式一样,除了最前面要加一个小写的k.

2. 语法(Syntax)

  • 每一代码行的长度
    最大的长度不能超过80个字符
  • 首行缩进
    当缩进你的代码时,使用两个空格的长度。禁忌:不要使用TAB键或空格和TAB混合方式
    例外情况: Exception: When a line break occurs inside parentheses, align the wrapped line with the first character inside the parenthesis.(翻译不出来,前后语意应该保持一致)
    可能翻译如下(猜测):当括号中的代码太多,你准备写成两行或者多行的时候,那么保证下一行的开始部分与该括号第一个字符列对齐。
    如下:
  • R语言变量后加点 r语言中变量命名规则_赋值

  • 上面实例出自说明文档,大部分内容都是在一个括号内,但是不同行和括号的开头部分是列对齐的。上面这段话也说明一个技巧:
    R的帮助文档很强大,如果在code style 上有疑惑,则查询帮助文档即可。
  • 空格
    请在所有的二元操作符(+, -, *, <-, etc)两边都加上空格.
    逗号前一定不能有空格,逗号后一定得有空格。
    (上面那个例子,注意看等号。)
    GOOD:
     tabPrior <- table(df[df$daysFromOpt < 0, “campaignid”]) #说明[并不是一个二元操作符。
     total <- sum(x[, 1])
     total <- sum(x[1, ])
    BAD:
  • R语言变量后加点 r语言中变量命名规则_R语言变量后加点_02

  • 左括号前面,要加一个空格,除了调用函数的时候。
    例外情况:Exception: Spaces around =’s are optional when passing parameters in a function call.
    这里并不知道 =’s 指的是什么?s指的是space
    可能翻译:
    在函数调用的时候,函数中等号左右的space是可选的。(应该对于所有的语言都是适用的)
    GOOD:
     if (debug)
    BAD:
     if(debug)
    有些情况下,可以使用多个空格,如果多个行需要对齐的时候(使用“=”或者”->”的时候),如下:
    在括号中( 括号和中括号 (),[] ),代码左右是不能留空格的
  • R语言变量后加点 r语言中变量命名规则_标志符_03

  • 例外情况:在逗号的后面
    GOOD:
  • R语言变量后加点 r语言中变量命名规则_标志符_04

  • BAD:
  • R语言变量后加点 r语言中变量命名规则_大括号_05

  • 大括号
    大括号中包含的是一个代码块
    {:开始大括号不能单独占一行
    }: 结束大括号必须占一行
    当大括号中只有一个命令行的时候,可以不使用大括号,但是整篇代码大括号的使用规则要保持一致。
    如下:
  • R语言变量后加点 r语言中变量命名规则_标志符_06

  •   如果开始新的代码块的时候,则一定要使用新的一行作为开始。
    BAD:
  • R语言变量后加点 r语言中变量命名规则_大括号_07

  • 赋值
    在赋值的时候,使用“->”号,不要使用”=”号
    GOOD:

x <- 5

  • BAD:

x = 5

  • 分号
    当一行代码结束的时候,不要使用分号
    不要使用分号将多个命令行变成一行。(在R的代码中,能不使用分号就不要使用分号)

3.代码的组织

  • 整体布局与顺序
    目的:如果大家都使用相同的布局规则,那么阅读他人代码要快速和容易一些。
  1. 版权声明(现在是不需要的)
  2. 作者的声明
  3. 文件的声明,包括程序的目的,输入和输出
  4. source()和library() 的声明(statements)
  5. 函数的定义
  6. 执行语句(such as:print,plot), 如果可行的话(这一句话可能翻译有误)测试单元应该专门写在一个单独的文件之中,命名为originalfilename_unittest.R.(这个我可能有用)
  • 注释指导(Commenting Guidelines 如何写注释)
  • 当注释你的代码的时候,所有的注释都应该以#开头,并空一个空格。
  • 短注释应该和代码同行,而后空两个空格,以#开头,空一个空格,随后写注释。
    实例如下:
  • 函数定义和调用
  • 在定义函数写参数的时候,要先列出没有默认值的函数参数,随后列出有默认值的参数。要注意先后顺序。(注意前后统一) 在函数的定义和调用的时候,参数写多行是被允许的。那么在什么时候要新开设一行呢?有赋值语句出现的时候(函数中有默认参数)
    实例:
  • Ideally, unit tests should serve as sample function calls (for shared
    library routines)
    如何翻译?理想情况下,单元测试为简单函数调用服务(为了共享库的路径)
  • (函数的说明文档)Function Documentation
    一个完整的函数应该包含相应的说明文档。
    这个说明文档在函数定义行之后(函数体的最前面)
  1. 一句话说明函数的作用是什么
  2. 说明参数的作用,使用Args:开头,接下来一行是一个参数,要说明参数的数据类型和参数的含义。
  3. 说明返回值,以Returns:开头
    总的原则是:不用看函数的代码,就能大致明白与函数相关的必要信息。
    示例:

注意: 不是所有的函数都要写注释,这点要记住。

  • TODO style(什么意思?之前没见过)
    Use a consistent style for TODOs throughout your code.
    TODO(username): Explicit description of action to be taken
    做什么?不懂

4. 语言

  • Attach
    不要使用Attach,它的益处远远小于其带来的弊端。
    在使用data.frame的时候,有时会使用Attach,这样在调用数据的时候,可以简化代码。
    (这个会引起不必要的麻烦,使用data.table吧)
  • 函数(Functions)
    Errors should be raised using stop().
    错误的抛出应该使用stop().**(如何使用stop?)
  • (目标和方法)Objects and Methods
    R有两种类,S3类和S4类,原则是:能不使用S4类就尽量不使用。

5. 例外的情况

写代码的时候,你应该尽量遵守上面的规则,除非有更好的理由用其他的方式。

例外情况包括:别人遗留下的代码或者修改第三方的代码

6. 临别赠言

使用约定俗成的规则,并且尽量保持代码风格一致。
如果你在修改代码,花几分钟看看代码,并确定风格。原则就是你要和以后的代码保持一致。

上面的规则只是全局规则,至于局部规则(local rule 也非常重要),要与已有代码保持一致,不要显得太突兀。