繁体   English   中英

如何使用Process Builder从Java运行R脚本

[英]How to run R script from java using Process builder

这应该很简单,但是我总是遇到错误。 我有一个秋千申请。 当用户按下按钮时,将提示他们选择要打开的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对我来说是最佳选择。

我究竟做错了什么?

ProcessBuilder的构造函数不采用命令行,而是采用命令及其参数。 因此,在此示例中,它应构造为

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

该构建器将使用单个参数pt运行R 注意,即使pt包含空格,也将其解释为单个参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM