web-dev-qa-db-ja.com

別のスクリプトから複数のRスクリプトを組み合わせて実行する

基本的に、私はデータを収集、並べ替え、分析、および表示するための約10〜15の個別のスクリプトファイルを使用して、Rでかなりの予測モデルを構築しました。すべてを1つの巨大なスクリプトファイルにまとめるのではなく、ある程度のモジュール性を維持して、以前にMatlabで行ったように、制御スクリプトまたは同等の制御メカニズムから各部分を実行したいと思います。これはRで可能ですか?

このスレッドとそれに関連するスレッドを読みましたが、この正確な答えを見つけることができませんでした。 Rソースコードの整理

16
Kris

source関数を探しているだけだと思います。見る ?source。私はよくsource他の.Rファイル。

16

私は新しい開発者であり、誰も例を挙げていないので私のために働いた例で答えています。 source( "myscript.R")を使用して別のRスクリプト "myscript_A.R"または "myscript_B.R"を呼び出す例は次のとおりです-

if(condition==X){
    source("myscript_A.R")
}else{
    source("myscript_B.R")
}
3
Ajay B

私はあなたが説明したことを行い、別々のRファイルにコードのチャンクを分割し、source(this)とsource(that)を実行してきましたが、ソース関数(サブルーチン/スクリプトファイルではなく)がより良い方法です。

スクリプトをこの方法で開発し、それにこだわった理由として考えられる3つの理由と、関数への切り替えが理にかなっている3つの理由を次に示します。

1)スクリプトが失敗したときに直接デバッグしたかった(単一のグローバル環境ですべての変数とそのステータスを追跡できる)。

  • RStudioのデバッガー/トレースバックが真のデバッグを行うためのはるかに優れた方法であることに気づきました。

2a)後で保持する必要がある変数がわかりませんでした(どの変数を関数に入れるか、どの変数を関数から出力するかを追跡したくありませんでした)

  • 関数は、スクリプトの一部で使用されるものと使用されないもの、およびスクリプトのすべての部分を出力する必要がないため、スクリプトの一部から保持するために不可欠なものについて明示することを強制します。変数は、グローバル環境との間でやり取りされるすべてのものよりも、必要な環境でのみ保持する方が適切です。
  • また、環境はリストとして機能することができると思うので、環境全体を関数に入れたり出したりすることは可能だと思いますか?これについてもっと読んだり、学習したりする必要があります。

2b)私たちはすべて(パラメーター/変数、設定、データのさまざまな部分)に多数の変数を持っているため、関数の内外にすべてを詰め込むことは現実的ではありません。

  • リストのような構造では、変数のカテゴリをまとめて関数に送ることができます。関数は(変数ではなく)リストを返すこともできます。

関連SO:

1
Arthur Yip

モジュール化の必要性を理解しましたが、関心のある実行用の単一のスクリプトを作成しないでください。複数のスクリプトをソーシングすると、ファイルに書き込む(CPUサイクルを浪費する)場合を除いて、スクリプト間で変数を渡すことができないという複雑さが生じます。各スクリプトのテキストコンテンツを読み取るマスタースクリプトを作成し、マスタースクリプトを作成して、そのスクリプトを実行することもできます。

0
LearnPKPD