R是一个高级编程语言主要用于统计计算和图形。R编程风格指南的目标是使我们的R代码更容易阅读、分享和验证。以下R代码规则是在谷歌的整个R合作用户社区下进行设计的。

符号和命名(Notation and Naming)

文件名(File names)

File names should end in .R and, of course, be meaningful.
GOOD: predict_ad_revenue.R
BAD: foo.R

标识符(Identifiers)

不要使用下划线(_)或连字符(-)标识符。标识符应按照以下命名约定。变量名的首选形式都是小写字母和单词分开用点(variable.name),但也接受variableName;函数名最初的大写字母和没有点(FunctionName);

**variable.name** is preferred, variableName is accepted
GOOD: avg.clicks
OK: avgClicks
BAD: avg_Clicks

FunctionName
GOOD:

CalculateAvgClicks

BAD:

calculate_avg_clicks , calculateAvgClicks
Make function names verbs.
Exception: When creating a classed object, the function name

语法(Syntax)
每行最大长度(Line Length)The maximum line length is 80 characters.

缩进(Indentation)

当缩进代码, 使用两个空间。绝不使用制表符或混合制表符和空格。例外:括号内发生换行时,使其与括号内的第一个字符对齐

间距(Spacing)

当使用所有二进制运算符(如=,+,-,<,等)在两端空格。例外:当符号 = 是函数调用时的传递参数周围不用空格隔开。
不要在符号“,”前空格隔开,但需要在“,”后添加空格
GOOD:

tab.prior <- table(df[df$days.from.opt < 0, "campaign.id"])
total <- sum(x[, 1])
total <- sum(x[1, ])

BAD:

tab.prior <- table(df[df$days.from.opt<0, "campaign.id"])  # Needs spaces around '<'
tab.prior <- table(df[df$days.from.opt < 0,"campaign.id"])  # Needs a space after the comma
tab.prior<- table(df[df$days.from.opt < 0, "campaign.id"])  # Needs a space before <
tab.prior<-table(df[df$days.from.opt < 0, "campaign.id"])  # Needs spaces around <
total <- sum(x[,1])  # Needs a space after the comma
total <- sum(x[ ,1])  # Needs a space after the comma, not before

在左括号之前添加一个空格,除了函数的调用

GOOD:

if (debug)

BAD:

if(debug)

Extra spacing (i.e., more than one space in a row) is okay if it improves alignment of equals signs or arrows (<-).

plot(x    = x.coord,     y    = data.mat[, MakeColName(metric, ptiles[1], "roiOpt")],     xlab = "dates", ylab = metric,main = (paste(metric, " for 3 samples ", sep = "")))

花括号(Curly Braces)

一个左括号不应该自己一行; 而一个右括号应该总是一行。当一个代码块是一个单独声明时你可以不适用花括号。但是,你必须考虑其他相同的情况,以保持一致。

if (is.null(ylim)) {  ylim <- c(0, 0.06) }

xor (but not both)


if (is.null(ylim))  ylim <- c(0, 0.06)

Always begin the body of a block on a new line.
BAD:

if (is.null(ylim)) ylim <- c(0, 0.06)
if (is.null(ylim)) {ylim <- c(0, 0.06)}
1
2

花括号与else
一个else语句应该总是被花括号包围在同一行。
Good:

if (condition) {  one or more lines
} else {  one or more lines
}

Bad:

if (condition) {  one or more lines
}
else {  one or more lines
}

赋值(Assignment)

Use <-, not =, for assignment.
GOOD:

x <- 5

BAD:

x = 5

总体布局和排序(General Layout and Ordering)

如果每个人都使用相同的一般顺序, 我们能够更快和更容易阅读和理解彼此的脚本。一般开头需包含:

版权声明注释
作者评论
文件描述的评论,包括程序的目的,输入和输出
source() 和 library() 声明
函数定义
已执行的语句

单元测试应该在一个单独的文件名为originalfilename_test.R。
代码注释(Commenting Guidelines)

简短的注释可以放置在代码之后,用 空格 + # + 空格隔开 ,较长的注释可以单独一行。

# Create histogram of frequency of campaigns by pct budget spent.
hist(df$pct.spent,    breaks = "scott",  # method for choosing number of buckets     xlab   = "Fraction of budget spent",     ylab   = "Frequency (count of campaignids)")

函数定义和调用(Function Definitions and Calls)

函数定义应该首先列出参数没有默认值, 紧随其后的是那些有默认值的。
在函数定义和函数调用时,允许多个参数一行,但是换行只允许在参数之间进行。
GOOD:

PredictCTR <- function(query, property, num.days,                                              show.plot = TRUE)

BAD:

PredictCTR <- function(query, property, num.days, show.plot =     TRUE)

理想情况下,单元测试应该作为样本函数调用(共享库例程)。
函数说明(Function Documentation)

在函数定义之下应该包含一个分段注释。这些注释应该包含一句关于函数的描述,一段关于该函数的参数列表的的描述(包括数据类型), 和一个返回值的描述。这些注释需具有足够的描述性的,调用者可以通过阅读注释即可懂得如何调用该函数。

Example

CalculateSampleCovariance <- function(x, y, verbose = TRUE) {  # Computes the sample covariance between two vectors.  #  # Args:  #   x: One of two vectors whose sample covariance is to be calculated.  #   y: The other vector. x and y must have the same length, greater than one,  #      with no missing values.  #   verbose: If TRUE, prints sample covariance; if not, not. Default is TRUE.  # # Returns:  #   The sample covariance between x and y.  n <- length(x)  # Error handling  if (n <= 1 || n != length(y)) {   stop("Arguments x and y have different lengths: ",length(x), " and ", length(y), ".")     }if (TRUE %in% is.na(x) || TRUE %in% is.na(y)) {  stop(" Arguments x and y must not have missing values.") }covariance <- var(x, y)  if (verbose)    cat("Covariance = ", round(covariance, 4), ".\n", sep = "")  return(covariance)
}

Functions

错误应该使用 stop() 进行提醒

【R语言】R语言编程规范相关推荐

  1. SAS Programming for R Users, Part 2 R语言的SAS编程教程,第2部分 Lynda课程中文字幕

    SAS Programming for R Users, Part 2 中文字幕 针对R用户的SAS编程,第2部分 中文字幕SAS Programming for R Users, Part 2 针对 ...

  2. 华为c语言编程规范_单片机开发之C语言编程基本规范

    为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范.本标准规定了程序设计人员进行程序设计时必须遵循的规范.本规范主要针对单片机编程语言和08编译器而言,包括排版.注释.命名.变量 ...

  3. C语言编程规范 clean code

    目的 规则并不是完美的,通过禁止在特定情况下有用的特性,可能会对代码实现造成影响.但是我们制定规则的目的"为了大多数程序员可以得到更多的好处", 如果在团队运作中认为某个规则无法遵 ...

  4. c语言编程题一空几分,C语言编程规范试题

    C语言编程规范试题 [说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC ...

  5. C/C++语言编程规范

    目录 前言 一.文件结构 1.1 版权和版本的声明 1.2 头文件的结构 1.3 头文件依赖 1.4 包含文件的次序 1.5 目录结构 二.程序的版式 2.1 空格还是制表位 2.2 空行 2.3 代 ...

  6. C语言编程规范 学习笔记

    C语言编程规范 一.代码总体原则 1.清晰 2.简洁 3.选择适合的风格,与代码原有风格保持一致 二.头文件 背景 术语定义 原则 2.1 头文件中适合放置接口的声明,不适合放置实现 原则 2.2 头 ...

  7. 嵌入式C语言编程规范

    前言 代码首先是给人看的,其次才是给机器执行的,因此一般情况下代码的可读性优先于性能,只有确定性能是瓶颈时,才需要主动优化. 可读性高的代码应当是易于理解并且易于实现的,代码越长越难看懂,可能出错的地 ...

  8. 黑马程序员:Java基础总结----Java语言编程规范

       黑马程序员:Java基础总结        Java语言编程规范:参考自SUN公司文档  ASP.Net+Android+IO开发..Net培训.期待与您交流!  I.   排版规范 A.  规 ...

  9. C语言编程规范学习笔记和总结(附华为编程规范机试参考试题)

    目录 规范说明 一.头文件 原则1.1 头文件中适合放置接口的声明,不适合放置实现. 原则1.2 头文件应当职责单一 原则1.3 头文件应向稳定的方向包含 规则1.1 每一个.c文件应有一个同名.h文 ...

  10. 嵌入式C语言编程规范(个人规约)

    0规范制定说明 0.1箴言 技术人员设计程序的首要目的是用于技术人员沟通和交流,其次才是用于机器执行.程序的生命力在于用户使用,程序的成长在于后期的维护及根据用户需求更新和升级功能.如果你的程序只能由 ...

最新文章

  1. PyTorch 笔记(08)— Tensor 比较运算(torch.gt、lt、ge、le、eq、ne、torch.topk、torch.sort、torch.max、torch.min)
  2. 【pytorch】torch.mm,torch.bmm以及torch.matmul的使用
  3. mysql 单列转换为行,mysql行转换为列
  4. 【NLP】ALL in BERT:一套操作冲进排行榜首页
  5. uiautomator日志文件转换为xml格式文件
  6. 02_MySQL约束课堂笔记
  7. tableView编辑
  8. Flex 学习笔记 提高编译速度
  9. hardlockup的原理说明
  10. 汇编语言Loop指令
  11. 2021 浏览器edge改 ie11 模式
  12. 计算机boot指令,BCDBoot 命令行选项
  13. android tv 文件管理,电视必备!5款文件管理器强力推荐
  14. 神经网络建模的基本思想,三维建模神经网络设计
  15. 解决人人微信商城打开商品页面加载缓慢的问题
  16. 各种水果使用套袋的材料选择
  17. 计算机网络中的c类地址,计算机网络中的A类、B类、C类地址的划分
  18. linux cpu检测工具,CoreFreq:一款强大的监控 CPU 的专业工具
  19. 通过RS232串口控制LG电视
  20. BP神经网络分类以及对算法进行改进—MATLAB实现

热门文章

  1. Only no-arg methods may be annotated with @Scheduled 的解决方法
  2. mysql 自增 空洞_MySQL auto_increment空洞问题
  3. 树型选择器/Browsing HDFS筛选文件类型
  4. 深度分析DD哪些数据会引起国安注意?
  5. 修改ipa文件版本号
  6. 《走近心理学》第二章之心理学的生物学理论
  7. 软考计算机专业英语,软考计算机专业英语常用词汇(首字母S)
  8. 从区块链到DAG(三)--DAG共识之SPECTRE协议
  9. 华硕路由桥接模式进入不了界面
  10. 程序员就业大数据报告出炉:平均月薪近2万,90后成主力