11

Rスタジオを使用しています。

R スクリプトがコンソールの source コマンドによって直接実行されているか、別のスクリプト内で実行されているかを知る方法はありますか。すなわち。別のスクリプトが供給され、これには最初のスクリプトへの呼び出しがあります。

これは、場合によってはいくつかの値を要求するのに役立ちます。

私が今行っていることは、変数を true または false に設定し、スクリプト内でその変数をチェックすることです。これは機能しますが、自動の方法の方が優れています。

御時間ありがとうございます。

編集:詳細

そのままで正常に実行される独立したスクリプトがあるとしますが、このスクリプトは、別のスクリプトが終了した後に実行するプロセスの一部です。両方を実行する必要がある場合は、最初に実行してから 2 番目を実行できます。2番目に走るチャンスもあります。

私が求めているのは、(2 番目のスクリプトで) この 2 番目が最初から呼び出されたかどうかを確認する方法があるかどうかです。

彼の簡単な例を見てみましょう ( Greg Snowからの回答に触発されました)。最初にRstudioで呼び出すファイル

# scripta.R
writeLines("script A")
if (interactive()) writeLines("interactive: true") else writeLines("interactive false")
source("scriptb.r")
writelines("after B")

次に、ソースされるファイル

# scriptb.R
writeLines("script B")
if (interactive()) writeLines("interactive: true") else writeLines("interactive false")
writeLines("end B")

Rstudioでの結果は

script A
interactive: true
script B
interactive: true
end B
after B

私は次のようなものを持っているのが好きです

script A
interactive: true
script B
interactive: false
end B
after B

私は今、より明確であることを願っています。

ありがとう

4

3 に答える 3

7

あなたの質問に対する直接的な答えではありませんが、関連するのはinteractive関数を見ることです。この関数はTRUE、R が、あなたが対話型セッションにいて、質問に答えられる人がいると想定するのが合理的であると信じている場合に返さFALSEれます。BATCH モードで実行されていて、人間 (またはエイリアン、知的な動物など)質問に答えます。

あなたが求めていたものとは正確には異なりますが、情報を求めるかどうかを決定するのに役立つ場合があります.

于 2012-06-02T19:41:38.047 に答える
1

私が正しく理解していれば、単純なmessage()コマンドで必要なことを実行できるはずです (私はそう思います)。論理チェックに基づいていくつかのスクリプトのいずれかを呼び出しているため、各スクリプトの開始時に次のようなメッセージがエコーされます。

message("R has now entered script_1.R \n")

するべきです。一部の変数が に設定されているためにスクリプトが呼び出されない場合、FALSEこのメッセージは表示されません。

プロンプトを表示してコンソールから値を読み取る必要がある場合は、次のような行を挿入します。

new_input <- readline("Enter a value for x: ")

あなたにも役立つでしょう。

于 2012-06-02T19:30:41.467 に答える