2011-08-04 47 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