質問

R コードを自動的に再フォーマットできるツール (エディター、スクリプトなど) はありますか?カスタマイズ可能である必要はありませんが、このコードにはセミコロンまたは改行の両方が含まれているため、セミコロンまたは改行のいずれかで区切られたステートメントを認識できなければなりません。すべてのステートメントを別の行に配置し、コード ブロックを一貫してインデントし、中括弧を一貫して配置できれば、私は非常に満足します。

編集:調査結果の要約

素晴らしい回答をありがとうございました。これが私が見つけたものです。

  • ESS と StatET はどちらも優れた R エディターであり、コード ブロックの自動インデントという優れた機能を備えています。StatET を使用すると、ファイル内のすべてを一度に選択して再インデントできます。私が知る限り、ESS では関数 def 全体を一度にインデントできますが、ファイル全体をインデントすることはできません (見逃していたら修正してください)。どちらも中括弧の配置を修正したり、複数のステートメント行を分割したりするものではありません。(例えば: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, ...)
        }
    }
}
役に立ちましたか?

解決

ESS は長期的にははるかに優れたソリューションですが、簡単なフォーマット作業だけを行う場合は、おそらくこのパッケージが役立つでしょう。 http://yihui.name/en/?s=formatr.

他のヒント

ESS を備えた Emacs はそれを実現します 非常によく -- R Core が推奨するデフォルト設定は次のとおりです。 セクション 7 Rコーディング標準R 内部構造 マニュアル。

私は StatET を使用し、そしてそれは、このために非常にうまく機能します。

また、 CRAN上formatRパッケージを試みることができます。

私は、おそらく次のEclipseプラグイン HTTP、それを使ったことがないけれども:// WWWを.walware.de /それ/ statet / を助けることができるかもしれません。

あなたはあなたのコードのインデントを修正するstatETで、Ctrl + Iを使用することができます。 しかし、良いことにホットキーを割り当てることで、特に結果生成コードスニペットでformatRパッケージを使用することが可能です。

私は同じ問題を抱えていました。 R Studioで再フォーマットするための本当に簡単な方法があります: ただ、新しいR scriptにすべてのコードをコピーして貼り付け

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top