R语言观察日志(part16)--Google‘s R Style Guide
學習筆記,僅供參考
自翻,有錯必究
文章目錄
- 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_clicks,calculateAvgClicks
使函數名成為動詞。
特別的:當創建一個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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习高级篇(part3)--
- 下一篇: 后缀cpp是什么文件?(各有什么作用)