【R语言】R语言编程规范
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语言编程规范相关推荐
- 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 针对 ...
- 华为c语言编程规范_单片机开发之C语言编程基本规范
为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范.本标准规定了程序设计人员进行程序设计时必须遵循的规范.本规范主要针对单片机编程语言和08编译器而言,包括排版.注释.命名.变量 ...
- C语言编程规范 clean code
目的 规则并不是完美的,通过禁止在特定情况下有用的特性,可能会对代码实现造成影响.但是我们制定规则的目的"为了大多数程序员可以得到更多的好处", 如果在团队运作中认为某个规则无法遵 ...
- c语言编程题一空几分,C语言编程规范试题
C语言编程规范试题 [说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC ...
- C/C++语言编程规范
目录 前言 一.文件结构 1.1 版权和版本的声明 1.2 头文件的结构 1.3 头文件依赖 1.4 包含文件的次序 1.5 目录结构 二.程序的版式 2.1 空格还是制表位 2.2 空行 2.3 代 ...
- C语言编程规范 学习笔记
C语言编程规范 一.代码总体原则 1.清晰 2.简洁 3.选择适合的风格,与代码原有风格保持一致 二.头文件 背景 术语定义 原则 2.1 头文件中适合放置接口的声明,不适合放置实现 原则 2.2 头 ...
- 嵌入式C语言编程规范
前言 代码首先是给人看的,其次才是给机器执行的,因此一般情况下代码的可读性优先于性能,只有确定性能是瓶颈时,才需要主动优化. 可读性高的代码应当是易于理解并且易于实现的,代码越长越难看懂,可能出错的地 ...
- 黑马程序员:Java基础总结----Java语言编程规范
黑马程序员:Java基础总结 Java语言编程规范:参考自SUN公司文档 ASP.Net+Android+IO开发..Net培训.期待与您交流! I. 排版规范 A. 规 ...
- C语言编程规范学习笔记和总结(附华为编程规范机试参考试题)
目录 规范说明 一.头文件 原则1.1 头文件中适合放置接口的声明,不适合放置实现. 原则1.2 头文件应当职责单一 原则1.3 头文件应向稳定的方向包含 规则1.1 每一个.c文件应有一个同名.h文 ...
- 嵌入式C语言编程规范(个人规约)
0规范制定说明 0.1箴言 技术人员设计程序的首要目的是用于技术人员沟通和交流,其次才是用于机器执行.程序的生命力在于用户使用,程序的成长在于后期的维护及根据用户需求更新和升级功能.如果你的程序只能由 ...
最新文章
- PyTorch 笔记(08)— Tensor 比较运算(torch.gt、lt、ge、le、eq、ne、torch.topk、torch.sort、torch.max、torch.min)
- 【pytorch】torch.mm,torch.bmm以及torch.matmul的使用
- mysql 单列转换为行,mysql行转换为列
- 【NLP】ALL in BERT:一套操作冲进排行榜首页
- uiautomator日志文件转换为xml格式文件
- 02_MySQL约束课堂笔记
- tableView编辑
- Flex 学习笔记 提高编译速度
- hardlockup的原理说明
- 汇编语言Loop指令
- 2021 浏览器edge改 ie11 模式
- 计算机boot指令,BCDBoot 命令行选项
- android tv 文件管理,电视必备!5款文件管理器强力推荐
- 神经网络建模的基本思想,三维建模神经网络设计
- 解决人人微信商城打开商品页面加载缓慢的问题
- 各种水果使用套袋的材料选择
- 计算机网络中的c类地址,计算机网络中的A类、B类、C类地址的划分
- linux cpu检测工具,CoreFreq:一款强大的监控 CPU 的专业工具
- 通过RS232串口控制LG电视
- BP神经网络分类以及对算法进行改进—MATLAB实现
热门文章
- Only no-arg methods may be annotated with @Scheduled 的解决方法
- mysql 自增 空洞_MySQL auto_increment空洞问题
- 树型选择器/Browsing HDFS筛选文件类型
- 深度分析DD哪些数据会引起国安注意?
- 修改ipa文件版本号
- 《走近心理学》第二章之心理学的生物学理论
- 软考计算机专业英语,软考计算机专业英语常用词汇(首字母S)
- 从区块链到DAG(三)--DAG共识之SPECTRE协议
- 华硕路由桥接模式进入不了界面
- 程序员就业大数据报告出炉:平均月薪近2万,90后成主力