2

我想从Renjin网站http://www.renjin.org/documentation/developer-guide.html运行这个示例,我想运行第一个“简单入门”示例。

以下是我的目录布局:

在此处输入图像描述

这是我的代码:

package stackoverflow;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import org.renjin.sexp.*; // <-- import Renjin's object classes
/**
 *
 * @author yschellekens
 */
public class StackOverflow {  

   public static void main(String[] args) throws Exception {
   ScriptEngineManager factory = new ScriptEngineManager();
    // create a Renjin engine
    ScriptEngine engine = factory.getEngineByName("Renjin");
    // evaluate R code from String, cast SEXP to a DoubleVector and store in the 'res' variable
    DoubleVector res = (DoubleVector)engine.eval("a <- 2; b <- 3; a*b");
    System.out.println("The result of a*b is: " + res);     

    }
}

为什么我会收到以下异常?(我应该得到 6 个)

run:
Exception in thread "main" java.lang.NullPointerException
    at stackoverflow.StackOverflow.main(StackOverflow.java:22)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

提前致谢

4

1 回答 1

2

抛出异常是因为您的应用程序找不到 Renjin ScriptEngine。您已将 renjin-studio 作为库提供,但您需要 renjin-script-engine 库,该库可从http://build.bedatadriven.com/job/renjin/lastSuccessfulBuild/org.renjin$renjin-script-engine/获得(使用带有依赖项的 JAR)。

不幸的是,只有在找不到引擎时ScriptEngineManager.getEngineByName()才会返回,因此您可以添加以下检查以确保引擎已加载:null

// check if the engine has loaded correctly:
if(engine == null) {
    throw new RuntimeException("Renjin Script Engine not found on the classpath.");
}

另请注意:它被称为Renjin,而不是Rengin

于 2014-05-21T12:18:58.427 回答