繁体   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