将脚本作为参数传递给RGui

时间:2011-08-04 16:21:05

标签: r command-line

我想知道是否可以在Windows中从命令提示符向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();

2 个答案:

答案 0 :(得分:7)

如上所述,你通常不能这样做。如果您入侵RprofileRprofile.site(请参阅?启动以获取更多信息,或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”,因为这可能发生在“path / to / new-files /”。

答案 1 :(得分:3)

(更新)警告:这将“有效”,但这是非常不明智的。据我所知,Rgui并不打算采用这样的脚本参数。 @Joris向我指出可接受参数列表列在Rgui --help中。

如果你按照下面的方法,有些人会认为你正在走向疯狂。另一方面,疯狂的人可能会认为你是个天才。所有人都会同意你不应该在他们使用的东西中这样做。

警告结束。

如果脚本名为.Rprofile,则会获取该脚本。如果您创建一个读取.Rprofile的{​​{1}}文件(或环境变量),那么您可以将其设置为解析命令行。

你将从R获得错误/忽略弹出窗口。这是为了确定已经完成了一件坏事。

对于它的价值,这可能是Rstudio的待办事项清单:http://support.rstudio.org/help/discussions/problems/823-pass-command-line-parameters-to-r