日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時間:2023/12/19 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 R语言观察日志(part16)--Google‘s R Style Guide 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

學(xué)習(xí)筆記,僅供參考

自翻,有錯必究


文章目錄

    • Google's R Style Guide
      • summary
        • R語言風(fēng)格
        • R語言規(guī)則
      • 符號和命名
        • 文件名
        • 標(biāo)識符
        • 每行長度(注意)
        • 縮進
        • 空格
        • 花括號
        • 被大括號括起來
        • 賦值
        • 分號
        • 總體布局和排序
        • 注釋
        • 函數(shù)定義和調(diào)用
        • 功能文檔
        • 例子函數(shù)
        • TODO Style(to do 要做, 但是沒有完成的事)
        • 附加
        • 功能
        • 對象和方法
        • 特別的
      • 臨別贈言
      • 參考文獻


Google’s R Style Guide


R是一種高級編程語言,主要用于統(tǒng)計計算和圖形,R編程風(fēng)格指南的目標(biāo)是使我們的R代碼更容易閱讀、共享和驗證,以下規(guī)則是與谷歌的整個R用戶社區(qū)合作設(shè)計的。


summary

R語言風(fēng)格


條目風(fēng)格
文件名以.R結(jié)尾
標(biāo)識符variable.name(或variableName),FunctionName,kConstantName
每行長度最多80個字符
縮進兩個空格,沒有制表符
空格
花括號左花括號在同一行,右花括號自占一行
else用括號將else括起來
賦值使用 <-,而不是 =
分號不要使用它們
總體布局和排序
注釋所有注釋以#開頭,后跟空格;#之前的內(nèi)嵌注釋需要兩個空格
函數(shù)定義和調(diào)用
功能文檔
示例函數(shù)
任何風(fēng)格TODO(username)

R語言規(guī)則


條目規(guī)則
附加(Attach)避免使用it
函數(shù)應(yīng)該使用stop()引發(fā)錯誤
對象和方法盡可能避免S4對象和方法;永遠(yuǎn)不要混淆S3和S4

符號和命名


文件名


文件名必須有意義,且以.R結(jié)尾。

good例子:predict_ad_revenue.R

bad例子:foo.R


標(biāo)識符


標(biāo)識符中不要使用下劃線(_)或連字符(-),標(biāo)識符應(yīng)根據(jù)以下約定命名:

  • 變量名的首選形式是所有小寫字母用點分隔的單詞(variable.name),但variableName也是可以接受的;
  • 函數(shù)名大寫字母開頭,沒有點(FunctionName);
  • 常數(shù)的命名類似于函數(shù),但以k開頭。

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

good例子:avg.clicks

ok例子:avgClicks

bad例子:avg_Clicks

FunctionName:

good例子:CalculateAvgClicks

bad例子:calculate_avg_clicks,calculateAvgClicks

使函數(shù)名成為動詞。

特別的:當(dāng)創(chuàng)建一個classed object時,函數(shù)名(構(gòu)造函數(shù))和類應(yīng)該匹配(例如,lm)


每行長度(注意)


每行最大字符數(shù)為80個字符。


縮進


縮進代碼時,請使用兩個空格。

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

特別的:當(dāng)括號內(nèi)出現(xiàn)換行符時,將換行與括號內(nèi)的第一個字符對齊。


空格


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

特別的:在函數(shù)調(diào)用中傳遞參數(shù)時,=周圍的空格是可選的。

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

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]) # 逗號后面需要空格,而不是前面

在左括號前加一個空格,函數(shù)調(diào)用除外。

good例子:if (debug)

bad例子:if(debug)

如果存在額外的空格(即一行中有多個空格)可以增加等號或箭頭(<-)的對齊效果,那也沒關(guān)系:

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 = "")))

不要在括號方括號內(nèi)的代碼周圍放置空格。

特別的:逗號后面一定要有空格。

good例子:

if (debug) x[1, ]

bad例子:

if ( debug ) # debug周圍應(yīng)該沒有空格 x[1,] # 逗號后需要一個空格

花括號


左花括號不應(yīng)該單獨成一行,右花括號應(yīng)該總是單獨成一行;

當(dāng)一個塊一條語句組成時,可以省略花括號;

但是,對于單個語句塊,必須始終使用或不使用花括號。

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語句應(yīng)該總是在同一行用花括號括起來。

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


分號

不要用分號結(jié)束您的行,也不要用分號將多個命令放在同一行。(分號不是必須的,為了與其他Google樣式指南保持一致,省略分號。)


總體布局和排序


如果每個人都使用相同的順序,我們將能夠更快、更容易地閱讀和理解彼此的腳本。

詞序內(nèi)容
1版權(quán)聲明注釋
2作者的話
3文件描述注釋,包括程序的目的、輸入和輸出
4source()和library()語句
5定義功能
6已執(zhí)行的語句(如打印、繪圖)

單元測試應(yīng)該放在一個單獨的名為originalfilename_test.R的文件中


注釋

注釋你的代碼,整個注釋行應(yīng)以#和一個空格開始。

短注釋可以放在代碼后面,前面有兩個空格,#,然后是一個空格。

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)")

函數(shù)定義和調(diào)用


函數(shù)定義應(yīng)該首先列出不帶默認(rèn)值的參數(shù),然后列出帶默認(rèn)值的參數(shù);

在函數(shù)定義和函數(shù)調(diào)用中,每行允許多個參數(shù)

只允許在賦值(assignments)之間換行(讀不懂就看下面的例子)。

good例子:

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

bad例子:

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

理想情況下,單元測試應(yīng)該作為示例函數(shù)調(diào)用(用于shared library routines)。


功能文檔

函數(shù)應(yīng)該在函數(shù)定義行的正下方包含一個注釋部分

這些注釋應(yīng)該包含對功能的一句話描述;

函數(shù)參數(shù)的列表,用Args:表示,并對每個參數(shù)進行描述(包括數(shù)據(jù)類型);

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

注釋應(yīng)該具有足夠的描述性,以便調(diào)用方可以使用該函數(shù),而無需閱讀函數(shù)的任何代碼。


例子函數(shù)


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風(fēng)格。

good例子:

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

附加

使用attach時產(chǎn)生錯誤的可能性很大,請避免它。


功能


應(yīng)該使用stop()拋出錯誤(Errors)。


對象和方法


S語言有兩個對象系統(tǒng),S3和S4,這兩個系統(tǒng)都可以在r中使用。S3方法更具交互性和靈活性,而S4方法則更加正式和嚴(yán)格。

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

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

  • S4對象可以直接在c++代碼中使用對象;(an S4 object would be to use objects directly in C++ code)
  • S4泛型/方法將在兩個參數(shù)上進行分派。(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)


特別的

應(yīng)該遵循上面描述的編碼約定,除非有充分的理由不這樣做。例外情況包括遺留代碼和修改第三方代碼。


臨別贈言


運用常識,保持一致。

如果您正在編輯代碼,請花幾分鐘時間查看您周圍的代碼并確定其風(fēng)格

如果別人在if子句周圍使用空格,你也應(yīng)該這樣做。如果他們的評論周圍有星星的小框,那么讓你的評論周圍也有星星的小框。

制定風(fēng)格指南的要點是要有一個通用的編碼詞匯表,這樣人們就可以專注于你所說的內(nèi)容,而不是你是如何說的。

我們在這里提供全局樣式規(guī)則,以便人們了解編碼詞匯表。但地方風(fēng)格也很重要。如果添加到文件中的代碼看起來與周圍現(xiàn)有的代碼有很大的不同,不連續(xù)會讓讀者在閱讀時失去節(jié)奏。盡量避免這種情況。

關(guān)于寫代碼的內(nèi)容講得夠多了,代碼本身要有趣得多。玩得開心!


參考文獻

R編碼約定:ht#tps://#pa#n.ba#id#u.com/s#/16McHYOBI_P-dqOrB7VosUg

emacs用戶,它在emacs中運行,并具有emacs模式:

總結(jié)

以上是生活随笔為你收集整理的R语言观察日志(part16)--Google‘s R Style Guide的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。