2011-08-04 45 views
5

我想知道是否可以通過windows命令提示符將參數傳遞給RGui。 我想這樣做將腳本作爲參數傳遞給RGui

RGui myScript.r param1 param2 

就像我會做RSCRIPT但我需要顯示的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

很漂亮的副本http://stackoverflow.com/questions/6940022/running-r-interactively-from-windows-command-prompt – 2011-08-04 16:50:34

+2

@Jack Maney:哦,不,它不是。 Rscript和RGui之間有很大的區別。事實上,OP在這裏提出的問題對於Rscript來說是非常有可能的,而IMho對於RGui來說是非常不可能的。 –

+2

@Jack,我不認爲它是重複的。這個問題是詢問您是否可以在R的實例中發送對象(或調用),而您鏈接的Q正在詢問如何啓動R的交互式會話。 –

回答

7

至於說,你通常無法做到這一點。如果您侵入了您的RprofileRprofile.site(請參閱?Startup以獲取更多信息,或者登錄this site),則可以解決該問題,但該代碼無法移植到其他計算機。所以,如果你覺得自己真的很幸運並敢於冒險,你可以嘗試做以下事情。

您將此代碼添加到您的Rprofile文件或Rprofile.site(您也可以在的R安裝在/ etc文件夾中找到):

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警告的彈出窗口。該代碼將導致變量Args包含在基本環境中(即而不是。GlobalEnv!)。該變量包含除文件名外的所有參數。隨後,您可以訪問一個從你的腳本,如:

#dumb script 
print(Args) 

如果調用RguiR,也將有一個包含已採購文件的名稱的變量文件。

請注意,更改您的rProfile不可移植到其他計算機。所以這僅供個人使用。在--args之後你也可以不給-f作爲參數,否則你會得到錯誤。

編輯:我們最好搜索「-f」而不是「-f」,因爲這可能發生在「路徑/到/新文件/」中。

+0

+1精彩!狂!我相信,環境變量中的'R_PROFILE'指向的任何文件都應該適用,所以它不需要在'.Rprofile'文件中。但是,我不是像@Joris這樣的高手。 ;-) – Iterator

+0

我喜歡這個問題,因爲這個答案。這是天才。 – Iterator

+0

@jakob r Thx的編輯,是有道理的。 –

3

(修訂版)警告:這將「工作」,但它是非常不明智的。據我所知,Rgui並不打算採用這樣的腳本參數。 @Joris向我指出可接受參數列表列於Rgui --help

如果你按照下面的方法,有些人會認爲你正在走向瘋狂。另一方面,瘋狂的人可能會認爲你是一個天才。所有人都會同意,你不應該在他們使用的東西中這樣做。

警告結束。

如果該腳本被命名爲.Rprofile它將被採購。如果創建一個讀取commandArgs()的文件(或環境變量).Rprofile,則可以將其設置爲解析命令行。

您將從R中收到錯誤/忽略彈出窗口。這是爲了確定一件壞事已經完成。

對於它的價值,這可能是待辦事項列表Rstudio上:http://support.rstudio.org/help/discussions/problems/823-pass-command-line-parameters-to-r

+1

並打破了很多其他的東西,包括絕對不可移植的。如果有人給我這樣的代碼,我可能會考慮購買步槍...... –

+0

@喬利斯:如果你等到那時,可能爲時已晚。 :) – Iterator

+0

@Joris:現在你正在生產這樣的代碼。 :) – Iterator