閱讀96 返回首頁    go 阿裏雲 go 技術社區[雲棲]


穀歌R語言格式指南


0?wx_fmt=jpeg

◆ ◆ 

總結:R格式規範


1. 文件名:以.R結束

2. 標識符:variable.name (或 variableName), FunctionName, kConstantName

3. 單行長度限製:至多80個字符

4. 縮進:兩個空格,不要使用“tab”

5. 空格

6. 花括號:左花括號在同一行上,右花括號另起一行

7. else:else的前後都是花括號

8. 賦值:使用“<-”,而不是“=”

9. 分號:不要使用

10. 整體布局和順序

11. 注釋準則:所有的注釋都應該以#開頭並且緊跟一個空格,如果注解與代碼在同一行內,那麼在#之前需加兩個空格

12. 函數的定義和調用

13. 函數文檔

14. 函數示例

15. TODO格式:(TODO(用戶名))


◆ ◆ 

R語言規則


1. attach:避免使用

2. 函數:用stop()命令引發出錯

3. 對象和方法:盡量避免使用S4對象和方法;不要將S3和S4混用

符號與命名


文件名


文件名應該以.R結尾,而且文件的命名應該具有實際意義

好的例子——predict_ad_revenue.R

不好的例子——foo.R


標識符


不要在標識符中使用下劃線(_)或者連接符(-)。標識符應該遵照以下約定來命名。變量名的首選形式是全部采用小寫字母並且用小數點(.)來區分詞(variable.name),但是variableName也是可以接受的;函數名首字母要大寫並且不帶有小數點(FunctionName);常量和函數名類似,但以k開頭。


  • 首選variable.name,variableName也可以接受

好的例子:avg.clicks

可接受的例子: avgClicks

不好的例子: avg_Clicks


  •  函數名 FunctionName

好的例子:CalculateAvgClicks

不好的例子: calculate_avg_clicks , calculateAvgClicks


函數名應該用動詞形式表示。


例外:當創建一個類對象,函數名(構造的)和類應該相互匹配(例如:lm)


  • 常量:kConstantName

語法


單行長度


單行的最大長度為80個字符


縮進


在縮進代碼的時候,用兩個空格。千萬不要用tab或者把tab和空格混合使用。

例外:當圓括號裏的內容出現分行的情況時,對準括號裏的行首與換行的第一個字符。


空格


在所有二元運算符(=, +, -,<-,等等)的前後都加上一個空格


例外

①調用函數傳遞參數時,“=”前後的空格可加可不加;

逗號前麵不要有空格,但是逗號後麵要帶一個空格。


好的例子——


0?wx_fmt=png

不好的例子——


0?wx_fmt=png


除非是調用函數,其餘情況下應該在左圓括號前加上一個空格


好的例子——


if (debug)


不好的例子——


if(debug)


如果加上額外的空格(也就是說在一行中超過一個空格)能夠使等號或者箭頭看起來更整齊,那也是可以的。


0?wx_fmt=png


不要在圓括號或者方括號裏麵的代碼前後加上空格


例外

在逗號後麵總是要加一個空格


好的例子——


0?wx_fmt=png


不好的例子——


0?wx_fmt=png


花括號


左花括號不能單獨成行;右花括號一定要單獨成行。可以在隻有一個語句的代碼模塊裏省略花括號; 但是必須保持對所有的單個語句的代碼的一致性。


0?wx_fmt=png


也可以寫成:


0?wx_fmt=png


一個模塊的語句總是另起一行


不好的例子——


0?wx_fmt=png


else前後的花括號


else語句應該總是在同一行中被花括號圍繞著


if (condition) {

  one or more lines

} else {

  one or more lines

}


不好的例子——


0?wx_fmt=png



不好的例子——


0?wx_fmt=png



賦值


Use <-, not =, for assignment.

用“<-”來賦值,而不是等號“=”。


好的例子——

x <- 5


壞的例子——

x = 5


分號


不要用分號作為行的結束,或者利用分號在一行中寫上多個命令。(分號是不必要的,根據其它Google格式指南的一致性,可以省略)

組織


◆ ◆ 

總體布局和順序


如果每一個人都使用通用的順序,那麼我們將更快及更容易地閱讀和理解其他人的腳本。

1. 版本聲明注釋

2. 作者信息

3.文件描述注釋,包括程序的功能、輸入和輸出

4.Source() 和 library()聲明

5.函數定義

6.執行語句聲明,如果適用的話(如:print,plot)

單元測試應該在一個名為originalfilename_test.R 的單獨文件中。


◆ ◆ 

注釋指南


注釋代碼——①必需以“#”及一個空格開始注釋行;②可以在代碼之後加上兩個空格,然後以“#”及一個空格開始一個短小的注釋。


0?wx_fmt=png


◆ ◆ 

函數定義和調用


函數定義首先列出不帶默認值的參數,隨後是帶默認值的參數。在函數定義和調用中,一行可以有多個參數;賦值語句之間可以換行。


好的例子——

0?wx_fmt=png

不好的例子——

0?wx_fmt=png


理想情況下,單元測試應該作為樣本函數調用(共享庫路徑)。


◆ ◆ 

函數文檔


函數應該包含緊接著函數定義行的一個注釋部分。這些注釋應該包含用一句話完成的函數的描述;函數的參數列表,記作Args以及每個參數的描述(包括數據類型);返回值的描述,記作Returns。注釋應該描述得足夠清楚,調用者可以不用看函數代碼就使用它。


函數示例


0?wx_fmt=png


  0?wx_fmt=png


◆ ◆ 

TODO風格


在代碼中始終用相同的TODO風格


TODO(username):明確說明要采取的行動


語言


附加


使用attach出現錯誤的可能性很高。避免使用。


函數


用stop()引發出錯


◆ ◆ 

對象和方法


S語言有兩個對象係統,S3和S4,它們在R中都是可用的。S3是更加交互式的和靈活的,而S4是更加正式的和嚴格的。(這兩個係統的說明,參考Thomas Lumley的《Programmer’s Niche: A Simple Class, in S3 and S4 in R》


用S3的對象和方法,除非有強烈的理由要使用S4的對象或方法。用S4對象的一個主要理由是在C++代碼中直接使用對象。用S4通用/方式的一個主要根據是由兩個參數調度。


避免混合使用S3和S4:S4方法忽略S3的繼承,反之亦然。


例外——

上麵描述的代碼約定應該遵循,除非有一個合理的原因使用其它約定。例外包括正常的代碼和修改的第三方代碼。

原文發布時間為:2016-10-09


本文來自雲棲社區合作夥伴“大數據文摘”,了解相關信息可以關注“BigDataDigest”微信公眾號


最後更新:2017-06-02 19:33:59

  上一篇:go  福利 | 分析554條數據科學麵試問題,給你靠譜求職攻略
  下一篇:go  13張圖看6年來數據科學概念之爭