当我尝试从 Java 运行 R 脚本时遇到问题。我真的在互联网上寻找这个问题的答案,但没有任何效果。
我使用过Rserve和Runtime.getRuntime().exec("Rscript myScript.R"),但它们都不适用于我的程序。
请帮助我
这是Java代码
RConnection c = new RConnection();
double d[] = c.eval("rnorm(10)").asDoubles();
org.rosuda.REngine.REXP x0 = c.eval("R.version.string");
System.out.println(x0.asString());
Runtime.getRuntime().exec("Rscript TestR.R");
这是我添加 Runtime.getRuntime().exec("Rscript "+rScript文件名)时抛出的错误消息;到上面的代码:
线程 "main" java.io.IOException: 无法运行程序 "Rscript": CreateProcess error=2, Le fichier spécifié est introuvable at java.lang.ProcessBuilder.start(未知来源) at java.lang.Runtime.exec(Unknown Source) at java.lang.Runtime.exec(Unknown Source) at java.lang.Runtime.exec(Unknown Source) 在算法。Testtest.main(Testtest.java:23) Cause by: java.io.IOException: CreateProcess error=2, Le fichier spécifié est introuvable at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.(来源不明) at java.lang.ProcessImpl.start(Unknown Source) ...5 更多
对我有用的是使用仁进解释器 下载仁进
private static final ThreadLocal<ScriptEngine> ENGINE = new ThreadLocal<>();
public static void main(String[] args) {
ScriptEngine engine = getScriptEngine();
try {
System.out.println("myScript");
engine.eval(new java.io.FileReader("src/myScript.R"));
engine.eval("Square(19)");
} catch (FileNotFoundException | NullPointerException | ScriptException e) {
System.out.println("An exception occured: " + e.getMessage());
e.printStackTrace();
}
}
private static ScriptEngine getScriptEngine() {
ScriptEngine engine = ENGINE.get();
if (engine == null) {
// Create a new ScriptEngine for this thread if one does not exist.
RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
engine = factory.getScriptEngine();
ENGINE.set(engine);
}
return engine;
}