2013-09-03 6 views
18

Rでパッケージを開発する場合は、すべてRのソースファイルがサブディレクトリR/に置かれ、コンパイルされたコードはすべてサブディレクトリsrc/に入れられます。Rパッケージ開発におけるコード編成

トップレベルですべてのものをダンプするのではなく、これらのフォルダ内のファイルに組織を追加したいと思います。たとえば、私がクライアント/サーバーアプリケーションを仮想的に開発しているとします。論理的には、すべてのクライアントRソースファイルをR/client/に、すべてのサーバーRソースファイルをR/server/に整理したいと思います。

パッケージを開発する際に、サブフォルダにコードを整理することは可能ですか? Writing R Extensionsマニュアルには指針がありません。R CMD buildは、サブフォルダに格納されているファイルをR/に検出しません。

+3

すべてを行うためにLinux用の簡単なスクリプトを書きました - クライアント用とサーバー用のものを。 –

+4

私はそれをすることができますが、それは本当に私の指摘ではありません。 –

答えて

7

カスタムメイクファイルの定義など、追加設定なしでサブフォルダを使用することはできません。あなたができる最善のは、接頭辞を使用することです:client-a.rclient-b.rserver-a.rserver-b.rなど

+2

**もちろんもちろん可能です**。あなたが何をしているのか知っていて、正しい 'src/Makevars'の足取りをしたいなら。主な例は、 'src /'の下に5つのサブフォルダを持つ[Matrix](http://cran.r-project.org/package=Matrix)パッケージで、他のフォルダも含まれています。さて、これが推奨されるアプローチでしょうか。いいえ、でもそれは実行可能であり、b)実行されています。 –

+3

@DirkEddelbuettelもちろん、頑張ってみると何でもできます。すべてのコードをデータベースに保存することもできます。 – hadley

+0

CRANがデータベースを受け入れないため、あなたはできません。しかし、それはサブフォルダを持つパッケージを受け入れます。 –

9

ハドレーの私見間違った答えにコメントを拡大:その(Rコアメンバーによって書かれた)Matrixパッケージで

ルックsrc/の下に5つのフォルダがあり、そのうち2つには他のサブフォルダが含まれています。他の例は、Rコアメンバーによって書かれ、維持されているパッケージ(共用)のRsymphonyです。

これを行うことは、かすかな心のためではありません。 R 強くは、異なるサブアーキテクチャのための独自のバージョンを構築できるように、完全にsrc/Makefileを超えてsrc/Makevarsフラグメントを好む。しかし、あなたが少しのことを知っていて、その努力を喜んでしているなら、これは完全に実行可能であり、完了しています。

まだそれは推奨されません。

+1

'src /'の下にサブフォルダを置くことができますが、 'R /'の下に置くことはできますか?それはちょっとでも重要な違いだと私には思われます。 –

+0

'R /'の場合はできません。とにかく照合/解析され、内部形式で保存されます。 'src /'の場合、いくつか(かなりの)痛みを伴います。 –

+0

'R /'にサブフォルダを保存するだけで、 'DESCRIPTION'ファイルの' Collat​​e: 'フィールドにファイルを手動で追加することもできません。 –

1

スレッドを認識するのはちょっと古いですが、私はこの問題に対する私の解決策を捨てると思っていました。私の問題は似ていますが、私は開発中のフォルダ階層を保持することにのみ関心があります。

開発中、私はサブフォルダ内のスクリプトファイルを自分の心の中身に整理しますが、生産のRのフラット階層と戦うのではなく、独自の「コンパイル時定数」を追加しました。 (ないトップレベルのスクリプト/中)サブフォルダにすべてのファイルに、ある

が、私は次を追加します。次に

if (!exists("script.debug")) 
    script.debug = FALSE 

、私は次のように要求されているものは何でも他の依存関係ロード:

デフォルトでは、コードは本番環境にあります(source.debug = FALSE)。開発時には、source.debug = TRUEであることを確認してから、プロジェクトのスクリプト/フォルダを作業ディレクトリ任意のスクリプトファイルをロードします。

もちろん、この例は少し単純です。すべてのスクリプトファイルの依存関係は同じフォルダ内にあると想定していますが、複雑な開発フォルダ階層に適したシステムを考案するのは簡単な問題です。

0

私はRコアチーム[「package/R /」ディレクトリ内のサブフォルダを許可する] [https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17258]]と主張しました。彼らはそれを改善したくはないようです。だから私のワークフローは以下の通りです。

1)私はそれらをパックする必要があるとき、私は

として R/の下にあるすべてのファイルを変換する)他のパッケージと同じRプロジェクトを作成しますが、フォルダ R/など

R/mcmc/a.R R/mcmc/b.R R/prediction/p1.R R/predection/p2.R

2にサブディレクトリを許可します

R/mcmc_a.R R/mcmc_b.R R/prediction_p1.R R/predection_p2.R ...

3)次に、私はR.

に平坦なバージョンをインストール

私は、次の2つのパッケージを作成することができ

https://github.com/feng-li/flutils/blob/master/inst/bin/install.HS

関連する問題