首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将脚本作为参数传递给RGui

将脚本作为参数传递给RGui
EN

Stack Overflow用户
提问于 2011-08-05 00:21:05
回答 2查看 2.6K关注 0票数 5

我想知道是否可以从windows的命令提示符将参数传递给RGui。我想做一些像这样的事情

代码语言:javascript
复制
RGui myScript.r param1 param2

就像我使用RScript一样,但我需要显示一个图形用户界面。

这里有一些关于我的需求的更多信息。我想在我的C#窗体应用程序中嵌入一个用R编写的gui。如果我按下表单中的一个按钮,应用程序将启动一个进程,该进程使用我的脚本和一些参数调用RGui。到目前为止,这在RScript上运行得很好,但现在我正在显示图形,我需要R处于交互模式。下面是我使用的代码:

代码语言:javascript
复制
        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();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-05 05:07:19

如上所述,您通常不能这样做。如果你侵入你的RprofileRprofile.site (参见启动获取更多信息,或this site),你可以绕过这个问题,但是代码不能移植到其他计算机上。因此,如果你真的觉得幸运和大胆,你可以试着做以下事情。

将此代码添加到Rprofile文件或Rprofile.site (可以在R安装的/etc文件夹中找到):

代码语言:javascript
复制
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) )
    }
}

这将允许您执行以下操作:

代码语言:javascript
复制
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。此变量包含除文件名以外的所有参数。随后,您可以从脚本中访问该脚本,例如:

代码语言:javascript
复制
#dumb script
print(Args)

如果使用RguiR调用,还将有一个变量文件,其中包含已获取源文件的名称。

请注意,更改rProfile不能移植到其他计算机。所以这只供个人使用。您也不能在--args之后提供-f作为参数,否则会出现错误。

编辑:我们最好搜索" -f“而不是”-f“,因为这可能出现在"path/to/new-files/”中。

票数 7
EN

Stack Overflow用户

发布于 2011-08-05 01:11:19

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

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

警告结束。

如果脚本被命名为.Rprofile,那么它将是源脚本。如果您创建了一个读取commandArgs().Rprofile文件(或环境变量),那么您可以将其设置为解析命令行。

你会收到来自R的错误/忽略弹出消息,这是为了识别已经做了一件不好的事情。

值得一提的是,这可能会出现在Rstudio的待办事项列表中:http://support.rstudio.org/help/discussions/problems/823-pass-command-line-parameters-to-r

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6944970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档