R に限らずコードを書く際には一定のスタイル(コーディングスタイル)に従うことで読みやすさやメンテナンス性を確保することができます。コーディングスタイルは、こうしなければならないという決まりがある訳ではないですが、前述の特性を確保するには一貫したスタイルを使用する必要があります。
スタイルガイドは多くの人が共通のコーディングスタイルを使えるように公開されています。Rのスタイルガイドで広く知られているのはGoogleのスタイルガイドですが、オブジェクト名に.
(dot)を使うことを推奨しており、クラス名などとコンフリクトする可能性があり、最近ではHadly Wickhamが提唱するスタイルガイドが支持されているようです。
Style Guide | 概要 |
---|---|
Google’s R style guide | 比較的広く知られているスタイルガイド |
Advanced R style guide | tidyvers style guideの元になっているスタイルガイド |
The tidyvers style guide | lintrに対応した最新のスタイルガイド |
R style guide for ZOL851 | 最近、Hadley Styleに準拠した模様 |
Hadly Wickhamが提唱する『The tidyverse style guide 』の基本的な部分は『Google’s R style guide 』に基づいていますが R 用のlint
であるlintr
にも対応しているおすゝめのスタイルガイドです。
『The tidyverse style guide 』の基本的なスタイルは以下の通りです。
項目 | Good | Bad |
---|---|---|
ファイル名 | 拡張子は.R で空白を使わず分かりやすい名前にする |
.r , fitting model.r , hoge.r など |
オブジェクト名 | 数字を除く小文字から始めて_ でつなぐスネークケース var_name , function_name など |
キャメルケース、ハンガリアンなど |
ラインあたりの行数 | 80文字目安 | |
インデント | 半角空白2文字 | TAB文字 |
スペーシング | 代入式や演算式の前後には半角空白1文字を入れ、, は後のみに半角空白1文字を入れる |
|
代入式 | <- (関数の引数指定は= ) |
= |
コメント | # の後に半角空白1文字を入れる |
|
テキスト囲み | "" 囲みが基本で" を含めたい場合は'' で囲む |
'' で囲む |
パイプ | 複数の関数をつなげて処理する場合はパイプ%>% を使う |
『Google’s R style guide 』と最も異なる点はオブジェクト名の書き方とパイプ%>%
です。詳細は『The tidyverse style guide 』で確認してください。
『The tidyverse style guide 』にしたがった場合でも Google’s R style guideの関数例 は下記のようなります。
12345678901234567890123456789012345678901234567890123456789012345678901234567890
---------+---------+---------+---------+---------+---------+---------+---------+
calculate_sample_covariance <- 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 invalid lengths: ", # inline comment
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.") # inline comment
}
covariance <- var(x, y)
if (verbose)
cat("Covariance = ", round(covariance, 4), ".\n", sep = "")
return(covariance)
}
変数名や関数名などを記法で識別するための記法(命名ルール)はいくつかあります。
記法名 | 記法例 | 備考 |
---|---|---|
キャメルケース | objectName | 別名Lowerキャメルケース |
パスカルケース | ObjectName | 別名Upperキャメルケース |
スネークケース | object_name | アンダースコアでつなげる |
チェインケース | object-name | ハイフンでつなげる |
ハンガリアン | iObjectName | 型を区別するために決まった接頭辞を用いる |
CC BY-NC-SA 4.0 , Sampo Suzuki [2019-05-10(JST)]