日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

自翻,有錯(cuò)必究


文章目錄

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


Google’s R Style Guide


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


summary

R語言風(fēng)格


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

R語言規(guī)則


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

符號(hào)和命名


文件名


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

good例子:predict_ad_revenue.R

bad例子:foo.R


標(biāo)識(shí)符


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

  • 變量名的首選形式是所有小寫字母用點(diǎn)分隔的單詞(variable.name),但variableName也是可以接受的;
  • 函數(shù)名大寫字母開頭,沒有點(diǎn)(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)詞

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


每行長度(注意)


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


縮進(jìn)


縮進(jìn)代碼時(shí),請使用兩個(gè)空格

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

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


空格


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

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

不要在逗號(hào)前加空格,但一定要在逗號(hào)后加空格

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

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

good例子:if (debug)

bad例子:if(debug)

如果存在額外的空格(即一行中有多個(gè)空格)可以增加等號(hào)或箭頭(<-)的對(duì)齊效果,那也沒關(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 = "")))

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

特別的:逗號(hào)后面一定要有空格。

good例子:

if (debug) x[1, ]

bad例子:

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

花括號(hào)


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

當(dāng)一個(gè)塊一條語句組成時(shí),可以省略花括號(hào);

但是,對(duì)于單個(gè)語句塊,必須始終使用或不使用花括號(hào)。

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

被大括號(hào)括起來


else語句應(yīng)該總是在同一行用花括號(hào)括起來。

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

賦值


使用 <-,而不是 =進(jìn)行賦值。

good例子:x <- 5

bad例子:x = 5


分號(hào)

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


總體布局和排序


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

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

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


注釋

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

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

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)用中,每行允許多個(gè)參數(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ù)定義行的正下方包含一個(gè)注釋部分

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

函數(shù)參數(shù)的列表,用Args:表示,并對(duì)每個(gè)參數(shù)進(jìn)行描述(包括數(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時(shí)產(chǎn)生錯(cuò)誤的可能性很大,請避免它。


功能


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


對(duì)象和方法


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

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

使用S4對(duì)象的充分理由是:

  • S4對(duì)象可以直接在c++代碼中使用對(duì)象;(an S4 object would be to use objects directly in C++ code)
  • S4泛型/方法將在兩個(gè)參數(shù)上進(jìn)行分派。(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)該遵循上面描述的編碼約定,除非有充分的理由不這樣做。例外情況包括遺留代碼和修改第三方代碼。


臨別贈(zèng)言


運(yùn)用常識(shí),保持一致。

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

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

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

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

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


參考文獻(xiàn)

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

emacs用戶,它在emacs中運(yùn)行,并具有emacs模式:

總結(jié)

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

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