【问题标题】:How to run R script from java using Process builder如何使用 Process builder 从 Java 运行 R 脚本
【发布时间】:2016-11-07 20:31:23
【问题描述】:

这应该很简单,但我不断收到错误消息。 我有一个摇摆应用程序。当用户按下按钮时,系统会提示他们选择要打开的 R 文件。 Rscript 路径存储在用户首选项中。然后 Processbuilder 应该运行脚本:

Processbuilder的方法如下

 public static void open(File document) throws IOException, ScriptException {
        Preferences userPrefs = Preferences.userNodeForPackage(TBB_SQLBuilder.class);
        String pt=document.getAbsolutePath().toString().trim()   
        Process process = new ProcessBuilder(userPrefs.get("PathToR",null)+" '"+pt+"'").start();
  }

但是它给了我错误:

java.io.IOException: Cannot run program "/Applications/RStudio.app '/Users/sebastianzeki/Myscript.R'": error=2, No such file or directory

当我将 R 路径(在 MacOSX ElCapitaine 上)更改为 /Library/Frameworks/R.framework/Versions/3.1/Resources/Rscript 时,我得到了同样的错误

尝试运行Runtime.getRuntime().exec(userPrefs.get("PathToR",null)); 也会给我一个错误,但这次是:

Cannot run program "/Applications/RStudio.app": error=13, Permission denied

但是当我使用 Rscript 时我没有得到这个 RStudio 和 Rscript 的权限设置为所有人读写。

我想做的就是在 R 中运行我的脚本(这会输出一个我的应用程序提取的 csv)

我知道 Renjin(不支持 dplyr)JRI 和 rJava(带有路径等的杂乱安装)和 RServe(只是不喜欢它),因此将我的脚本作为外部脚本运行的 Process builder 对我来说是最佳选择。

我做错了什么?

【问题讨论】:

    标签: java r


    【解决方案1】:

    ProcessBuilder 的构造函数接受的不是命令行,而是命令及其参数。所以,在这个例子中,它应该被构造为

    new ProcessBuilder(userPrefs.get("PathToR",null), pt);
    

    此构建器将使用单个参数 pt 运行 R。请注意,即使pt 包含空格,它也会被解释为单个参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 2018-09-22
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多