R コードを自動的に再フォーマットできるツール (エディター、スクリプトなど) はありますか? カスタマイズ可能である必要はありませんが、このコードにはセミコロンまたは改行の両方があるため、セミコロンまたは改行で区切られたステートメントを認識できる必要があります。すべてのステートメントを別の行に配置し、一貫してコード ブロックをインデントし、一貫して中括弧を配置できる場合、私は非常に満足しています。
編集:調査結果の要約
素晴らしい答えをありがとう。これが私が見つけたものです。
- ESS と StatET はどちらも優れた R エディターであり、コード ブロックの自動インデントをうまく処理します。StatET を使用すると、ファイル内のすべてを一度に選択して再インデントできます。私が知る限り、ESS では関数定義全体を一度にインデントできますが、ファイル全体をインデントすることはできません (見逃した場合は訂正してください)。これらのどちらもブレースの配置を修正したり、複数ステートメントの行を分割したりしません。(例: i = n*b;a=i+1)
- formatR は素晴らしいです。インデントを修正するだけでなく、中括弧を一貫して配置し、複数ステートメントの行を分割します。
ソースディレクトリ全体を変換できるように、私が書いた小さな関数を次に示します(奇妙なことにアニメーションパッケージにあるformatRと同じ基本関数を使用します)。
library("animation")
tidy.all <- function(inDir = NULL, outDir = NULL, ...) {
if (is.null(inDir) || is.na(outDir))
stop("inDir can't be null or NA")
if (!file.info(inDir)$isdir)
stop("inDir must be a directory")
if (is.null(outDir) || is.na(outDir))
stop("outDir can't be null or NA")
if (!file.exists(outDir))
dir.create(outDir)
if (!file.info(outDir)$isdir)
stop("outDir must be a directory")
for (f in dir(inDir)) {
currFile <- file.path(inDir, f)
if (length(grep(".*\\.R$", currFile, perl = T))) {
outFile <- file.path(outDir, f)
if (file.exists(outFile))
stop(paste("refusing to overwrite", outFile))
tidy.source(currFile, file = outFile, ...)
}
}
}