2012-06-02 12 views
7

私はRスタジオを使用しています。Rスクリプトが直接または別のスクリプト内で実行されているかどうかを知る方法はありますか?

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

これは、場合によっては値の入力を促すのに便利です。

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

お時間をいただきありがとうございます。

EDIT >>>詳細情報

はの私があると正常に動作独立したスクリプトがあるとしましょう、しかし、このスクリプトは、別のスクリプトが終了した後に実行するプロセスの一部です。私は両方を実行する必要がある場合は、私は最初の、次に2番目を実行することができます。私はちょうど秒を実行するチャンスを持っています。

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

(グレッグ・雪からの回答に触発さ)彼の簡単な例を見

scripta.Rください:

writeLines("script A") 
if (interactive()) writeLines("interactive: true") else writeLines("interactive false") 
source("scriptb.r") 

scriptb.R:

writeLines("script B") 
if (interactive()) writeLines("interactive: true") else writeLines("interactive false") 
writeLines("end B") 

Rstudioで結果をis

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

私は好きなものを持っています

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

私は今、より明確になることを望みます。

おかげ

+1

この設定を使用する理由についてもう少し詳しく説明できますか?それは私に少し秘密に聞こえる... –

答えて

1

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

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

はそれを行う必要があります。変数がFALSEに設定されているためスクリプトが呼び出されない場合、このメッセージは表示されません。

あなたが要求し、コンソールから値を読み、その後、次のような行を挿入する必要がある場合:

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

することもあなたに使用であろう。

5

質問に直接答えはありませんが、関連するものはinteractiveの機能です。この関数は、対話セッション中であるとRが信じている場合はTRUEを返し、人が質問に答えることができると仮定するのが妥当であれば、バッチモードで実行している場合はFALSEを返します。エイリアン、インテリジェントな動物など)が質問に答えます。

頼んでいたものではありませんが、情報の入力を促すかどうかを決定するのに役立ちます。

+0

あなたの答えをありがとう。どうやらRスタジオはこれをTRUEに設定して、何も得ることはできません。これは私が探しているものです。ちょうど私の質問にもっと情報を追加しました。 – notuo

+0

@notuo、あなたは両方のスクリプトを完全に制御している場合、おそらく最良のアプローチは、変数を作成するか、またはスクリプトAでオプションを設定し、次にスクリプトBで変数のオプションまたは存在をチェックし、スクリプトAで変更します。オプションまたは変数を終了します。 –

関連する問題