2011-08-04 14 views
5

WindowsのコマンドプロンプトからRGuiにパラメータを渡すことが可能かどうか疑問に思っていました。 私はRScriptで行うのと同じようにスクリプトをパラメータとしてRGuiに渡す

RGui myScript.r param1 param2 

ような何かをしたいと思いますが、私はGUIを表示する必要があります。

ここに私のニーズに関するいくつかの情報があります。 私はC言語のフォームアプリケーションにRで書かれたGUIを組み込みたいと思っています。フォームのボタンを押すと、スクリプトといくつかのパラメータでRGuiを呼び出すプロセスが起動されます。これは今までRScriptでうまくいきましたが、私はRをインタラクティブモードにする必要があるグラフィックスを表示しています。この意志「仕事」が、非常に無分別である:

 myProcess.StartInfo.FileName =Pathing.GetUNCPath(r_path) + "\\Rscript"; 
     string script_path=Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.Parent.FullName.ToString(); 
     myProcess.StartInfo.Arguments = Pathing.GetUNCPath(script_path) + "\\display.r " + data_path; 
     myProcess.StartInfo.UseShellExecute = true;   
     myProcess.Start(); 
     myProcess.WaitForExit(); 
+1

@stackoverflow.com/questions/6940022/running-r-interactively-from-windows-command-promptの複製より前に –

+2

@Jack Maney:ああ、そうではありません。 RscriptとRGuiの間には大きな違いがあります。実際、OPがここで求めていることはRscriptでは非常に可能であり、imhoはRGuiでは非常に不可能です。 –

+2

@Jack、私は重複しているとは思わない。この質問は、あなたがリンクしているQがRの対話的なセッションを開始する方法を尋ねている間に、Rのインスタンス間でオブジェクト(または呼び出し)を送信できるかどうかを尋ねています。 –

答えて

7

としては言っても、あなたが正常にそれを行うことはできません。 RprofileまたはRprofile.site(詳細については「スタートアップ」を参照)またはthis siteをハックすると、そのコードを回避できますが、コードは他のコンピュータに移植することはできません。あなたが本当にラッキーで大胆な気がするなら、あなたは次のことを試みることができます。

あなたは(あなたのRインストールの/ etcフォルダで見つけることができます)あなたのRprofileファイルまたはRprofile.siteにこのコードを追加します。

Args <- commandArgs(trailingOnly=TRUE) 
if(length(Args)>0 & sum(grepl(" -f ",commandArgs()))==0){   
    if(grepl("(?i).r$",Args[1])){ 
     File <- Args[1] 
     Args <- Args[-1] 
     tryCatch(source(File) , error=function(e) print(e)) 
    } 
} 

これは、あなたができるようになります:

Rgui --args myscript.r arg1 arg2 
Rscript myscript.r arg1 arg2 
R --args myscript.r arg1 arg2 
R -f myscript.r --args arg1 arg2 

- args引数は、@iteratorが警告するポップアップを処理します。コードでは、基本環境(ではなく、 .GlobalEnv!)に含まれる変数Argsが生成されます。この変数には、ファイル名を除くすべての引数が含まれます。

#dumb script 
print(Args) 
Rguiまたは Rで呼び出された場合、また、調達されたファイルの名前を含む変数のファイルが存在します:あなたは、その後、あなたのスクリプトから1つ、例えばことをアクセスすることができます

rProfileの変更は他のコンピュータには移植できないことに注意してください。これは個人的な使用のためだけです。また、-argsの後に-fをパラメータとして指定することもできません。そうしないと、エラーが発生します。

編集: "-f"よりも "-f"を検索するほうが、 "path/to/new-files /"になる可能性があります。

+0

+1素晴らしい!マッド!環境変数の 'R_PROFILE'が指すファイルにも同じことが適用されるはずなので、' .Rprofile'ファイルに入れる必要はありません。しかし、私は@Jorisのようなこれのマスターではありません。 ;-) – Iterator

+0

私はこの答えのためにこの質問に好意的です。それは天才です。 – Iterator

+0

@ jakob r編集のためのThxは理にかなっています。 –

3

(更新)WARNING: は、ここで私が使用していたコードです。私が知る限り、Rguiはそのようなスクリプトのパラメータを取ることを意図していません。 @ヨリスは私に許容可能なパラメータのリストがRgui --helpに記載されていることを指摘した。

以下の方法を実行すると、あなたが狂気に向かっていると思う人もいます。一方、狂った人たちは、あなたが天才だと思うかもしれません。皆は、あなたが使っているものでこれをしてはならないということに同意します。

警告の終わりです。

スクリプトの名前が.Rprofileの場合、そのスクリプトはソースになります。 commandArgs()というファイル(または環境変数).Rprofileを作成すると、コマンドラインを解析するように設定できます。

あなたはRからポップアップを無視します。これは、悪いことが行われたことを識別するためのものです。

何が価値があるのは、これはRstudioためのto-doリスト上にある場合:http://support.rstudio.org/help/discussions/problems/823-pass-command-line-parameters-to-r

+1

そして絶対に外せないことを含めて、他の多くのものを壊してください。もし誰かが私のようなコードを与えたら、私はライフルを買うことを検討するかもしれません... –

+0

@Joris:それまで待っていたら、それは遅すぎるかもしれません。 :) – Iterator

+0

@Joris:そして今、あなたはこのようなコードを生成しています。 :) – Iterator

関連する問題