R编程规范

注:来自Google’s R Style Guide

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的帮助文档很强大,如果在code style 上有疑惑,则查询帮助文档即可。

  • 空格
    请在所有的二元操作符(+, -, *, <-, etc)两边都加上空格.
    逗号前一定不能有空格,逗号后一定得有空格。
    (上面那个例子,注意看等号。)
    GOOD:
     tabPrior <- table(df[df$daysFromOpt < 0, “campaignid”]) #说明[并不是一个二元操作符。
     total <- sum(x[, 1])
     total <- sum(x[1, ])
    BAD:
    这里写图片描述
    左括号前面,要加一个空格,除了调用函数的时候。
    例外情况:Exception: Spaces around =’s are optional when passing parameters in a function call.
    这里并不知道 =’s 指的是什么?s指的是space
    可能翻译:
    在函数调用的时候,函数中等号左右的space是可选的。(应该对于所有的语言都是适用的)
    GOOD:
     if (debug)
    BAD:
     if(debug)
    有些情况下,可以使用多个空格,如果多个行需要对齐的时候(使用“=”或者”->”的时候),如下:
    在括号中( 括号和中括号 (),[] ),代码左右是不能留空格的
    这里写图片描述
    例外情况:在逗号的后面
    GOOD:
    这里写图片描述
    BAD:
    这里写图片描述

  • 大括号
    大括号中包含的是一个代码块
    {:开始大括号不能单独占一行
    }: 结束大括号必须占一行
    当大括号中只有一个命令行的时候,可以不使用大括号,但是整篇代码大括号的使用规则要保持一致。
    如下:
    这里写图片描述

      如果开始新的代码块的时候,则一定要使用新的一行作为开始。
    BAD:
    这里写图片描述

  • 赋值
    在赋值的时候,使用“->”号,不要使用”=”号
    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 也非常重要),要与已有代码保持一致,不要显得太突兀。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值