【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() 进行提醒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值