【问题标题】:Starting R and calling a script from a batch file启动 R 并从批处理文件调用脚本
【发布时间】:2012-07-18 22:21:30
【问题描述】:

我有一个基于 R 的 GUI,它允许一些非技术用户访问统计模型。就目前而言,用户必须先加载 R,然后在命令行输入loadGui()

虽然这并不太具有挑战性,但我不喜欢让非技术人员在命令行中键入 anything。我有编写一个启动 R GUI,然后自动运行该命令的 .bat 文件(用户都在运行 Windows,尽管多平台解决方案也受到赞赏)的想法。

我的第一个问题是从命令行打开 RGui。虽然我可以提供明确的路径,例如

"%ProgramW6432%\R\R-2.15.1\bin\i386\Rgui.exe"

每次升级 R 时都需要更新。最好从 %path% 环境变量中检索 RGui 的位置,但我不知道解析它的简单方法。

第二个更大的问题是如何在启动时从命令行调用 R 的命令。我的第一个想法是我可以获取~/.Rprofile 的副本,附加额外的命令,然后在加载 R 后替换文件的原始副本。不过这非常混乱,所以我想要一个替代方案。

在批处理模式下运行 R 不是一个选项,首先因为我无法说服 GUI 显示自己,其次因为我希望 R 控制台可用,即使用户不应该需要 em> 使用它。

如果你想要一个玩具 GUI 来测试你的想法,试试这个:

loadGui <- function()
{
  library(gWidgetstclck)
  win <- gwindow("test")
  rad <- gradio(letters[1:3], cont = win)
}

【问题讨论】:

    标签: r batch-file startup


    【解决方案1】:

    使用上面https://stackoverflow.com/a/27350487/41338 的答案和Richie Cotton 的评论,我得出了以下解决方案,通过检查指向窗口的指针是否有效,在关闭窗口之前保持脚本处于活动状态。

    对于使用以下命令创建和显示的 RGtk2 窗口:

    library(RGtk2)
    mainWindow <- gtkWindow("toplevel", show = TRUE)
    

    创建一个检查指向它的指针是否存在的函数:

    isnull <- function(pointer){
      a <- attributes(pointer)
      attributes(pointer) <- NULL
      out <- identical(pointer, new("externalptr"))
      attributes(pointer) <- a
      return(out)
    }
    

    在脚本的最后:

    while(!isnull(mainWindow)) Sys.sleep(1)
    

    【讨论】:

      【解决方案2】:

      我做过几次类似的事情。在我的情况下,客户端使用的是 Windows,所以我只是在他们的计算机上安装了 R,并在他们的桌面上创建了一个快捷方式来运行 R。然后我右键单击快捷方式并选择属性以获取属性对话框。然后,我将“开始于”文件夹更改为我希望它从中运行的文件夹(其中包含具有正确数据的 .Rdata 文件以及 .Rdata 文件中的 .First 函数或文件夹中的 .Rprofile )。还有一个“运行:”选项,其中有一个“最小化”选项来最小化运行主 R 窗口。

      我已经创建了我想要运行的函数(通常是使用 tcltk 的专用 gui)和任何需要的数据并将它们保存在 .Rdata 文件中,还创建了 .First 或 .Rprofile 来运行显示 gui 的命令.用户双击桌面上的图标并弹出我的 GUI,他们可以使用它而忽略其他部分。

      【讨论】:

      • 谢谢。在玩了这个之后,我认为它比你建议的更简单,因为双击 .RData 文件(假设操作系统设置正确)会自动打开 RGui 并运行 .First 函数。所以不需要额外的快捷方式。
      【解决方案3】:

      看看 ProjectTemplate 库。它做你想做的事。它从批处理文件加载使用过的库并在加载后自动运行 R 文件以及许多其他有用的东西......

      【讨论】:

        【解决方案4】:

        问题 1:我只是安装在 Windows 上建议的默认目录中,而是将 R 和一些相关的东西放在我安装 R 本身的c:/opt/ 中,比如说c:/opt/R-current,这样路径c:/opt/R-current/bin 将保持不变。升级时,我先重命名为R-previous,然后安装到新的R-current

        问题 2:我想我在很久以前就用脚本解决了。您现在可以使用Rscript.exe 来启动这些,并且有等待提示的 tcltk 示例。

        【讨论】:

        • Rscript 确实很有用;特别是如果您根本不想使用 R 控制台。默认情况下,脚本只是退出,所以我需要在脚本末尾添加 while(isExtant(win)) Sys.sleep(1) 之类的内容。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-14
        • 2015-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-20
        • 1970-01-01
        相关资源
        最近更新 更多