转载请注明出处,谢谢。
 

编程风格指导

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

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

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

注释与命名

文件名称

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

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

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

-download.R
-parse.R
-explore.R

对象名称

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

— Phil Karlton

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

# Good
day_one
day_1 # Bad
first_day_of_the_month
DayOne
dayone
djm1

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

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

语法

空格

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

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

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

# Good
x <- :
base::get # Bad
x <- :
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[, ] # Bad
if ( debug ) do(x) # No spaces around debug
x[,] # Needs a space after the comma
x[ ,] # Space goes after comma not before

花括号

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

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

# Good

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

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

if (y <  && 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 <-
# Bad
x =

代码组织

注释

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

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

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

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

Advanced R之编程风格的更多相关文章

  1. R 语言编码风格指南

    R 语言是一门主要用于统计计算和绘图的高级编程语言.这份 R 语言编码风格指南旨在让我们的 R代码更容易阅读.分享和检查.以下规则系与 Google 的 R 用户群体协同设计而成. 概要: R编码风格 ...

  2. Google Java编程风格指南

    出处:http://hawstein.com/posts/google-java-style.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Comm ...

  3. 来自 Google 的 R 语言编码风格指南

    来自 Google 的 R 语言编码风格指南R 语言是一门主要用于统计计算和绘图的高级编程语言. 这份 R 语言编码风格指南旨在让我们的 R 代码更容易阅读.分享和检查. 以下规则系与 Google ...

  4. Google Java编程风格指南中文版

    作者:Hawstein出处:http://hawstein.com/posts/google-java-style.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Cre ...

  5. Java学习笔记(四)——google java编程风格指南(上)

    [前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...

  6. (转)google Java编程风格中文版

    转:http://www.hawstein.com/posts/google-java-style.html 目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 ...

  7. Google的Java编程风格指南(Java编码规范)

    这份文档是Google Java编程风格规范的完整定义.当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格. 与其它的编程风格指南一样,这里所讨论的不仅仅是 ...

  8. C与C++的编程风格区别

    c和c++都是在实践中发展起来的语言.实用性极强.c是与UNIX/Linux的发展相辅相成的.而C++是B.S为了摆脱c与硬件以及底层过于紧密的苦恼,而开发的语言.C++可以说就是c语言的超集.任何c ...

  9. R语言编程艺术(3)R语言编程基础

    本文对应<R语言编程艺术> 第7章:R语言编程结构: 第9章:面向对象的编程: 第13章:调试 ============================================== ...

随机推荐

  1. Android模糊效果总结

    1. 软件模糊 用软件的方法.利用cpu计算,无sdk版本号要求. 效果图: 关键模糊代码 github链接 原文 链接 译文 链接 演示样例 代码 本文地址 :http://blog.csdn.ne ...

  2. ios -- 极光推送《1》

    昨天公司项目要加入远程推送功能,自己做显然会很麻烦,所以用了极光的远程推送,下面我会讲如何制作推送证书并使用极光推送进行远程推送. 先讲讲怎么下载推送证书吧(前面的很简单要是知道的可以直接往下滑,简书 ...

  3. lumen url重写

    打开nginx配置文件vhosts.conf,加上try_files $uri $uri/ /index.php?$query_string; ,如下 location / { index index ...

  4. JBoss AS 7之域名直接訪问配置(The Return Of The King)

    1.6域名直接訪问配置 部署JBoss的时候,默认情况下訪问是须要加项目名字才可以訪问的. 可是怎样才可以"IP+port"訪问呢?以下将解说怎样配置. 配置域名訪问须要在项目以下 ...

  5. Unix环境高级编程——守护进程记录总结(从基础到实现)

    一.概念及其特征 守护进程是系统中生存期较长的一种进程,常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,在后台运行.守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程 ...

  6. 九度OJ 1145:Candy Sharing Game(分享蜡烛游戏) (模拟)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:248 解决:194 题目描述: A number of students sit in a circle facing their teac ...

  7. vs2013工程技巧

    1 vs工程输出了dll和lib,分别是什么,有什么用? 当设置工程property的Project Defaults的Configuration Type为dll时,不光会生成该动态链接库的dll文 ...

  8. mysql系列之1.mysql基础

    非关系型(NOSQL)数据库 键值存储数据库: memcached  /  redis  /  memcachedb  /  Berkeley db 列存储数据库: Cassandra  /  Hba ...

  9. Webpack探索【16】--- 懒加载构建原理详解(模块如何被组建&如何加载)&源码解读

    本文主要说明Webpack懒加载构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack懒加载构建原理. 本文使用的 ...

  10. sap crm 常用表

    [转自 http://blog.csdn.net/zhongguomao/article/details/6714616] SAP CRM 参数文件集目标组常用表: CRMD_MKTTG_TG_T C ...