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

 

Tips

変数名や関数名などを記法で識別するための記法(命名ルール)はいくつかあります。

記法名 記法例 備考
キャメルケース objectName 別名Lowerキャメルケース
パスカルケース ObjectName 別名Upperキャメルケース
スネークケース object_name アンダースコアでつなげる
チェインケース object-name ハイフンでつなげる
ハンガリアン iObjectName 型を区別するために決まった接頭辞を用いる

 


Sampo Suzuki CC BY-NC-SA 4.0 , Sampo Suzuki [2019-05-10(JST)]