У меня проблема, когда я пытаюсь запустить сценарий R из Java. Я действительно ищу ответ на эту проблему в Интернете, но ничего не работает.
Я использовал 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" + rScriptFileName); к коду выше:
Exception in thread "main" java.io.IOException: Cannot run program "Rscript": CreateProcess error=2, Le fichier spécifié est introuvable at java.lang.ProcessBuilder.start(Unknown Source) at java.lang.Runtime.exec(Unknown Source) at java.lang.Runtime.exec(Unknown Source) at java.lang.Runtime.exec(Unknown Source) at algo.Testtest.main(Testtest.java:23) Caused by: java.io.IOException: CreateProcess error=2, Le fichier spécifié est introuvable at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.(Unknown Source) at java.lang.ProcessImpl.start(Unknown Source) ... 5 more




Для меня сработало использование интерпретатора Renjin Скачать Renjin
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;
}
Вам может потребоваться абсолютный путь к исполняемому файлу. Исключение «файл не найден» означает, что исполняемый файл не найден. IIRC,
exec(...)не будет искать ваш путь.