学习笔记,仅供参考

自翻,有错必究


文章目录

  • Google's R Style Guide
    • summary
      • R语言风格
      • R语言规则
    • 符号和命名
      • 文件名
      • 标识符
      • 每行长度(注意)
      • 缩进
      • 空格
      • 花括号
      • 被大括号括起来
      • 赋值
      • 分号
      • 总体布局和排序
      • 注释
      • 函数定义和调用
      • 功能文档
      • 例子函数
      • TODO Style(to do 要做, 但是没有完成的事)
      • 附加
      • 功能
      • 对象和方法
      • 特别的
    • 临别赠言
    • 参考文献

Google’s R Style Guide

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

summary

R语言风格

条目 风格
文件名 .R结尾
标识符 variable.name(或variableName),FunctionName,kConstantName
每行长度 最多80个字符
缩进 两个空格,没有制表符
空格
花括号 左花括号在同一行,右花括号自占一行
else 用括号将else括起来
赋值 使用 <-,而不是 =
分号 不要使用它们
总体布局和排序
注释 所有注释以#开头,后跟空格;#之前的内嵌注释需要两个空格
函数定义和调用
功能文档
示例函数
任何风格 TODO(username)

R语言规则

条目 规则
附加(Attach) 避免使用it
函数 应该使用stop()引发错误
对象和方法 尽可能避免S4对象和方法;永远不要混淆S3和S4

符号和命名

文件名

文件名必须有意义,且以.R结尾。

good例子:predict_ad_revenue.R

bad例子:foo.R

标识符

标识符中不要使用下划线(_)或连字符(-),标识符应根据以下约定命名:

  • 变量名的首选形式是所有小写字母用点分隔的单词(variable.name),但variableName也是可以接受的;
  • 函数名以大写字母开头,没有点(FunctionName);
  • 常数的命名类似于函数,但以k开头。

variable.name是首选,variableName也是可以接受的:

good例子:avg.clicks

ok例子:avgClicks

bad例子:avg_Clicks

FunctionName

good例子:CalculateAvgClicks

bad例子:calculate_avg_clickscalculateAvgClicks

使函数名成为动词

特别的:当创建一个classed object时,函数名(构造函数)和类应该匹配(例如,lm)

每行长度(注意)

每行最大字符数为80个字符。

缩进

缩进代码时,请使用两个空格

切勿使用制表符制表符和空格的混合

特别的:当括号内出现换行符时,将换行与括号内的第一个字符对齐

空格

在所有二元运算(=, +, -, <-等)符周围放置空格

特别的:在函数调用中传递参数时,=周围的空格是可选的。

不要在逗号前加空格,但一定要在逗号后加空格

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"])
# < 周围需要空格
tab.prior <- table(df[df$days.from.opt < 0,"campaign.id"])
# 逗号后需要一个空格
tab.prior<- table(df[df$days.from.opt < 0, "campaign.id"])
# <- 前需要一个空格
tab.prior<-table(df[df$days.from.opt < 0, "campaign.id"])
# <- 周围需要空格
total <- sum(x[,1])
# 逗号后需要一个空格
total <- sum(x[ ,1])
# 逗号后面需要空格,而不是前面

在左括号前加一个空格,函数调用除外。

good例子:if (debug)

bad例子:if(debug)

如果存在额外的空格(即一行中有多个空格)可以增加等号或箭头(<-)的对齐效果,那也没关系:

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

不要在括号方括号内的代码周围放置空格。

特别的:逗号后面一定要有空格。

good例子:

if (debug)
x[1, ]

bad例子:

if ( debug )  # debug周围应该没有空格
x[1,]  # 逗号后需要一个空格

花括号

左花括号不应该单独成一行,右花括号应该总是单独成一行;

一个块一条语句组成时,可以省略花括号;

但是,对于单个语句块,必须始终使用或不使用花括号。

good例子:

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

或者:

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

bad例子:

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

被大括号括起来

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
}

bad例子:

if (condition)one line
elseone line

赋值

使用 <-,而不是 =进行赋值。

good例子:x <- 5

bad例子:x = 5

分号

不要用分号结束您的行,也不要用分号将多个命令放在同一行。(分号不是必须的,为了与其他Google样式指南保持一致,省略分号。)

总体布局和排序

如果每个人都使用相同的顺序,我们将能够更快、更容易地阅读和理解彼此的脚本。

词序 内容
1 版权声明注释
2 作者的话
3 文件描述注释,包括程序的目的、输入和输出
4 source()library()语句
5 定义功能
6 已执行的语句(如打印、绘图)

单元测试应该放在一个单独的名为originalfilename_test.R的文件中

注释

注释你的代码,整个注释行应以#和一个空格开始。

短注释可以放在代码后面,前面有两个空格,#,然后是一个空格。

good例子:

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

函数定义和调用

函数定义应该首先列出不带默认值的参数,然后列出带默认值的参数;

在函数定义和函数调用中,每行允许多个参数

只允许在赋值(assignments)之间换行(读不懂就看下面的例子)。

good例子:

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

bad例子:

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

理想情况下,单元测试应该作为示例函数调用(用于shared library routines)。

功能文档

函数应该在函数定义行的正下方包含一个注释部分

这些注释应该包含对功能的一句话描述;

函数参数的列表,用Args:表示,并对每个参数进行描述(包括数据类型);

返回值的描述,用Returns:表示。

注释应该具有足够的描述性,以便调用方可以使用该函数,而无需阅读函数的任何代码。

例子函数

good例子:

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 handlingif (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)
}

TODO Style(to do 要做, 但是没有完成的事)

在你的代码中使用一致的todo风格。

good例子:

TODO(username): Explicit description of action to be taken

附加

使用attach时产生错误的可能性很大,请避免它。

功能

应该使用stop()抛出错误(Errors)。

对象和方法

S语言有两个对象系统,S3和S4,这两个系统都可以在r中使用。S3方法更具交互性和灵活性,而S4方法则更加正式和严格。

使用S3对象和方法,除非有充分的理由使用S4对象或方法。

使用S4对象的充分理由是:

  • S4对象可以直接在c++代码中使用对象;(an S4 object would be to use objects directly in C++ code)
  • S4泛型/方法将在两个参数上进行分派。(an S4 generic/method would be to dispatch on two arguments.)

避免混合S3和S4: S4方法忽略S3继承,反之亦然。(Avoid mixing S3 and S4: S4 methods ignore S3 inheritance and vice-versa)

特别的

应该遵循上面描述的编码约定,除非有充分的理由不这样做。例外情况包括遗留代码和修改第三方代码。

临别赠言

运用常识,保持一致。

如果您正在编辑代码,请花几分钟时间查看您周围的代码并确定其风格

如果别人在if子句周围使用空格,你也应该这样做。如果他们的评论周围有星星的小框,那么让你的评论周围也有星星的小框。

制定风格指南的要点是要有一个通用的编码词汇表,这样人们就可以专注于你所说的内容,而不是你是如何说的。

我们在这里提供全局样式规则,以便人们了解编码词汇表。但地方风格也很重要。如果添加到文件中的代码看起来与周围现有的代码有很大的不同,不连续会让读者在阅读时失去节奏。尽量避免这种情况。

关于写代码的内容讲得够多了,代码本身要有趣得多。玩得开心!

参考文献

R编码约定:ht#tps://#pa#n.ba#id#u.com/s#/16McHYOBI_P-dqOrB7VosUg

emacs用户,它在emacs中运行,并具有emacs模式:

R语言观察日志(part16)--Google‘s R Style Guide相关推荐

  1. R语言观察日志(part20)--包的组件之R代码

    学习笔记,仅供参考,有错必纠 文章目录 R代码 R代码的工作流程 组织函数 代码风格 对象名称 空格 余下的请看R语言观察日志(part16)--Google's R Style Guide 顶层代码 ...

  2. R语言观察日志(part23)--bibliometrix包

    R语言文献计量分析笔记 参考文献:如何用 R 快速了解科研领域?; BiblioShiny使用介绍; R语言快速实现文献计量分析 GitHub:https://github.com/massimoar ...

  3. R语言观察日志(part15)--R的缺点

    学习笔记,仅供参考,有错必纠 摘自:基于R语言的机器学习 R的缺点

  4. R语言观察日志(part4)--paste函数

    学习笔记 转载自:R语言中字符串的拼接操作 paste函数 在R语言中 paste 是一个很有用的字符串处理函数,可以连接不同类型的变量及常量.函数paste的一般使用格式为: paste(..., ...

  5. R语言观察日志(part18)--.C和.Call

    学习笔记,仅供参考,有错必纠 文章目录 .C(外来函数接口) 描述 用法 参数 细节 返回值 参数类型 注意 .Call(C/C++代码的接口) 描述 用法 参数 细节 返回值 .C(外来函数接口) ...

  6. R语言观察日志(part8)-RMarkdown之其他语言

    学习笔记,仅供参考,有错必纠 参考自:官方文档rmarkdown;R Markdown中配置python R Markdwon 其他语言 我们的.Rmd文件同样可以执行除了R以外的语言,比如: Pyt ...

  7. R语言观察日志(part17)--.Primitive

    学习笔记,仅供参考,有错必纠 文章目录 .Primitive 描述 用法 参数 细节 例子 .Internal 描述 用法 参数 .Primitive 描述 .Primitive通过名字查找一个内部实 ...

  8. R语言观察日志(part14)--R语言杂记

    学习笔记,有错必纠 文章目录 2020年8月杂记 search函数 未命名 向量化计算 ls函数 2020年8月杂记 search函数 search函数可以查看当前环境已加载的R包: R>sea ...

  9. R语言观察日志(part13)--从GitHub中下载R包

    学习笔记,仅供参考,有错必纠 从GitHub中下载R包 这里,我们将介绍两种下载并加载R包的方式,即通过在线安装和本地安装. 在线安装 我们在使用在线安装的方法时,可能会遇到各种各样的问题,这里,我们 ...

最新文章

  1. 突然就懵了!面试官问我:线程池中多余的线程是如何回收的?
  2. HashMap和Hashtable及HashSet的区别
  3. 《R语言实战》第4章
  4. Charles学习(三)之使用Map local代理本地静态资源以及配置网页代理在Mac模拟器调试iOS客户端...
  5. 从外网Thinkphp3日志泄露到杀入内网域控 - 红队攻击之域内靶机渗透实战演练
  6. HTML常用标签+CSS基础
  7. 微软发布 VS Code Jupyter 插件!不止 Python,多语言的 Jupyter Notebook支持来了!
  8. [Python3] 面向对象编程
  9. java 性能优化分析工具_【java】JVM性能调优监控工具、可视化在线内存分析工具...
  10. 数字图像处理:图像直方图基础知识介绍
  11. 去百度还是去创新工厂? 信开复还是信彦宏?
  12. python获取远程主机信息_python远程获取主机监控信息
  13. python 循环写入excel_用PYTHON将“for”循环的输出写到excel中
  14. 阿里王坚:人工智能是一个非常傲慢的提法,这个提法最后会害死大家
  15. Sprig的EL表达式和读取Properties文件教程
  16. UI电话图标设计教程
  17. android xml绘图p113-p117
  18. Oracle项目管理主数据之OBS
  19. sequelize的使用
  20. java 简单背包问题_简单的背包问题--java递归实现

热门文章

  1. python2与python3代码互相转化时注意事项
  2. 深度学习(二十五)——Attention(2)
  3. 高德地图api接口文档_在 R 语言里面调用高德地图接口:地理编码与路径规划
  4. php的toast,使用toast组件实现提示用户忘记输入用户名或密码功能
  5. Oracle丢失管理员密码的解决方法
  6. C#中oracle数据库的连接方法
  7. 架构整洁之道, 看这一篇就够了!
  8. amazeui学习笔记一(开始使用4)--Web App 相关
  9. 如何在mac上搭建sqli-labs
  10. Javascript权威指南——第一章Javascript概述