簡體   English   中英

從Java運行R腳本

[英]Run R script from java

嘗試從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” + rScriptFileName);時拋出的錯誤消息。 上面的代碼:

線程“主”中的異常java.io.IOException:無法運行程序“ Rscript”:CreateProcess錯誤= 2,java.lang.ProcessBuilder.start中的特殊錯誤是不可思議的,java.lang.Runtime.exec( java.lang.Runtime.exec上的Unknown Source)(algo.Testtest.main(Testtest.java:23)上java.lang.Runtime.exec的Unknown Source)(原因):java.io.IOException:CreateProcess error = 2,在Java.lang.ProcessImpl.create(本機方法)處,java.lang.ProcessImpl.create(本機方法)具有特殊意義(未知源),在java.lang.ProcessImpl.start(未知源)處具有... 5個

對我有用的是使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM