25

パッケージを開発する場合、RすべてのRソース ファイルはサブディレクトリR/に配置され、コンパイルされたすべてのコードはサブディレクトリに配置されますsrc/

すべてを最上位にダンプするのではなく、これらのフォルダー内のファイルに何らかの編成を追加したいと考えています。たとえば、クライアント サーバー アプリケーションを仮想的に開発しているとします。R/client/論理的には、すべてのクライアント R ソース ファイルを に、すべてのサーバー R ソース ファイルを に整理したいと考えていますR/server/

パッケージを開発するときにコードをサブフォルダーに整理することは可能ですか? R 拡張機能の記述マニュアルでは、ガイダンスは提供されておらず、 R CMD buildの下のサブフォルダーに保存されているファイルも検出されませんR/

4

4 に答える 4

10

コメントをHadleyのIMHOの間違った答えに拡張する:

以下に 5 つのフォルダーがあり、そのうちの 2 つには他のサブフォルダーが含まれているMatrixパッケージ (R Core メンバーによって作成されたもの) を見てsrc/ください。他の例としては、R Core メンバーによって (共同) 作成および保守されているRsymphonyパッケージがあります。

これを行うことは、気弱な人向けではありません。Rは、さまざまなサブアーキテクチャ用に独自のバージョンを構築できるようにするために、フルよりもフラグメントを強く好みます。しかし、あなたが少しのメイクを知っていて、喜んで努力するなら、これは完全に実行可能であり、完了しています.src/Makevarssrc/MakefileMakefile

それでも推奨されるわけではありません。

于 2013-09-03T14:14:38.957 に答える
8

追加の設定 (カスタム makefile の定義など) を行わないと、サブフォルダーを使用できません。できる最善の方法は、接頭辞を使用することです: client-a.rclient-b.rserver-a.rserver-b.rなど。

于 2013-09-03T13:56:12.320 に答える
1

スレッドが少し古いことを認識したので、この問題の解決策を投入したいと思いました。私の問題は似ていますが、開発中のフォルダー階層の保持のみに関心があることに注意してください。

開発中は、スクリプト ファイルを思いのままにサブフォルダーに整理しますが、本番環境で R のフラットな階層と戦うのではなく、いわば独自の「コンパイル時定数」を追加しました。

つまり、(最上位の scripts/ ではなく) サブフォルダーにあるすべてのファイルに、次を追加します。

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

次に、他の依存関係が必要な場合は、次のように読み込みます。

source.list <- c(
            "script_1.R",
            "script_2.R",
            "script_3.R",
            "script_4.R"
             )

if (script.debug)
    source.list <- paste("./script_subfolder/", source.list, sep="")

lapply(source.list, source)

デフォルトの想定では、コードは本番環境 (source.debug = FALSE) にあるため、開発中は、スクリプト ファイルをロードする前に、source.debug = TRUE で、プロジェクトの script/ フォルダーが作業ディレクトリとして設定されていることを確認してください。

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

于 2015-12-14T18:00:57.583 に答える