[英]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.