zoukankan      html  css  js  c++  java
  • Advanced R之编程风格

    转载请注明出处,谢谢。
     

    编程风格指导

      好的编码风格如同正确使用标点符号一样重要。没有编码规范仍然可以管理代码,但是有代码规范会使代码更易阅读。如同标点样式,编码规范也有不同。下面描述的是我所使用的编码规范(在本书及其他地方)。该编码规范基于谷歌的R style guide,稍有修改。你不必使用这种编码规范,但是你应该保持一种编码风格。

      好的编码风格很重要,因为虽然你的代码只有一个作者,却有很多读者。如果你和其他人一起编码,这就更加重要了。在这种情况下,事先确定一套编码规范是个好主意。没有哪种编码风格比另一种更好之说,所以与其他人一同编码,你需要做出妥协选择一些并不是你最爱的风格。

      Yihui Xie写了一个包叫做formatR,可以清理格式很差的代码。它不能完成所有的事情,但是可以快速的对糟糕的代码进行改善。使用之前务必阅读简介(the introduction)

    注释与命名

    文件名称

      文件名称应该有意义,并且以.R结尾。

    # Good
    fit-models.R
    utility-functions.R
    
    # Bad
    foo.r
    stuff.r

      如果文件需要按照顺序执行,命名时在文件名称前面加上次序编号:

    0-download.R
    1-parse.R
    2-explore.R

    对象名称

    “计算机科学只有2件事情难搞:缓存有效性和命名。”

    — Phil Karlton

      变量和函数名称应该是小写的。在名称中利用下划线分割单词。一般情况下,变量名称应该是名词,函数名称应该是动词。尽量保证名称含义明确且准确(这很不容易!)。

    # Good
    day_one
    day_1
    
    # Bad
    first_day_of_the_month
    DayOne
    dayone
    djm1

      尽量避免使用已有的函数名和变量名。不然会对读者造成困惑。

    # Bad
    T <- FALSE
    c <- 10
    mean <- function(x) sum(x)

    语法

    空格

      在中缀运算符(=,+,-,<-等)的前后使用空格。使用=调用函数时也是如此。逗号后面使用空格,前面不使用(就像正规英文)。

    # Good
    average <- mean(feet / 12 + inches, na.rm = TRUE)
    
    # Bad
    average<-mean(feet/12+inches,na.rm=TRUE)

      这里有个例外,即:,::和:::,这3个符号不需要前后加空格。

    # Good
    x <- 1:10
    base::get
    
    # Bad
    x <- 1 : 10
    base :: get

      在括号的左侧使用空格,除非是在调用函数。

    # Good
    if (debug) do(x)
    plot(x, y)
    
    # Bad
    if(debug)do(x)
    plot (x, y)

      为了对齐等号或者赋值(<-),额外的空格(比如一行中多个空格)是ok的。

    list(
      total = a + b + c, 
      mean  = (a + b + c) / n
    )

       不要在括号或者方括号内侧(除非有逗号,如上所述)放置空格。

    # Good
    if (debug) do(x)
    diamonds[5, ]
    
    # Bad
    if ( debug ) do(x)  # No spaces around debug
    x[1,]   # Needs a space after the comma
    x[1 ,]  # Space goes after comma not before

    花括号

      左花括号后面应该总是另起一个新行。右花括号应该总是独占一行,除非后面有else。

      花括号内部应该总是缩进的。

    # Good
    
    if (y < 0 && debug) {
      message("Y is negative")
    }
    
    if (y == 0) {
      log(x)
    } else {
      y ^ x
    }
    
    # Bad
    
    if (y < 0 && debug)
    message("Y is negative")
    
    if (y == 0) {
      log(x)
    } 
    else {
      y ^ x
    }

      非常短的代码可以放在一行:

    if (y < 0 && debug) message("Y is negative")

     一行的长度

      尽量保证一行代码不超过80个字符。在使用合理字体大小的情况下,这正好适合打印。如果发现超出了,说明你也许应该单独封装一个函数出来。

    缩进

      代码缩进时,使用2个空格而不是tab键或者混合使用tab键和空格。

      唯一的例外是如果函数定义跨越了多行。这种情况下,缩进第二行到缩进开始的地方:

    long_function_name <- function(a = "a long argument", 
                                   b = "another argument",
                                   c = "another long argument") {
      # As usual code is indented by two spaces.
    }

    赋值

      赋值使用<-而不是=。

    # Good
    x <- 5
    # Bad
    x = 5

    代码组织

    注释

      给代码添加注释。每行注释应该由#开始,紧跟一个空格。注释应该解释为什么,而不是是什么。

      使用由-或者=组成的注释线,将文件划分为容易阅读的代码块。

    # Load data ---------------------------
    
    # Plot data ---------------------------
     

  • 相关阅读:
    20162302
    20162302
    20162302 实验三《敏捷开发与XP实践》实验报告
    20162302 第九周作业
    20162302 第八周作业
    20162302 实验二《面向对象程序设计》实验报告
    20162302 第七周作业
    项目Alpha冲刺Day8
    项目Alpha冲刺Day7
    项目Alpha冲刺Day5
  • 原文地址:https://www.cnblogs.com/lizichao/p/4807444.html
Copyright © 2011-2022 走看看