Запустить сценарий R из java

У меня проблема, когда я пытаюсь запустить сценарий 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

Вам может потребоваться абсолютный путь к исполняемому файлу. Исключение «файл не найден» означает, что исполняемый файл не найден. IIRC, exec(...) не будет искать ваш путь.

KevinO 12.04.2018 05:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
777
1

Ответы 1

Для меня сработало использование интерпретатора 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;
}

Другие вопросы по теме