2017-07-17 25 views
0

我试图在Java程序内执行R脚本,所有依赖项都使用Maven安装,但问题仍然存在。Renjin IOException当加载包Rweka时,找不到函数'.jfield'

在我的研究中,我发现jfield是rJava提供的一个函数,但我不确定rJava(Renjin包)是否实现了它。

¿有没有办法检查这个? ¿或者我错过了什么?

我的程序使用此库,通过韧劲所有支持:

  • rJava
  • RWeka
  • RWekajars

而且I'm使用betadriven公共回购槽Maven来安装它们。 这里it's主类:

package org.dfont.renjin; 

import org.renjin.script.RenjinScriptEngineFactory; 
import javax.script.ScriptEngine; 


public class TryRenjin { 
    public static void main(String[] args) throws Exception { 
     // create a script engine manager: 
     RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory(); 
     // create a Renjin engine: 
     ScriptEngine engine = factory.getScriptEngine(); 

     // ... put your Java code here ... 
     if(engine == null) { 
      throw new RuntimeException("Renjin Script Engine not found on the classpath."); 
     } 

     else{ 
      engine.eval(new java.io.FileReader("/home/dfont/renjinTest/pruebaCalculo.R")); 

     } 
    } 
} 

在这里,我的pom.xml,

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.dfont.renjin</groupId> 
    <artifactId>renjin</artifactId> 
    <version>0.1</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.renjin</groupId> 
      <artifactId>renjin-script-engine</artifactId> 
      <version>RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.renjin.cran</groupId> 
      <artifactId>rJava</artifactId> 
      <version>0.9-8-renjin-5</version> 
     </dependency> 
     <dependency> 
      <groupId>org.renjin.cran</groupId> 
      <artifactId>RWekajars</artifactId> 
      <version>3.9.1-3-b3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.renjin.cran</groupId> 
      <artifactId>RWeka</artifactId> 
      <version>0.4-34-b5</version> 
     </dependency> 


    </dependencies> 
    <repositories> 
     <repository> 
      <id>bedatadriven</id> 
      <name>bedatadriven public repo</name> 
      <url>https://nexus.bedatadriven.com/content/groups/public/</url> 
     </repository> 
    </repositories> 
    <build> 
     <plugins> 
      <plugin> 
       <!-- Build an executable JAR --> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>3.0.2</version> 
       <configuration> 
        <archive> 
         <manifest> 
          <mainClass>org.dfont.renjin.TryRenjin</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>2.4.3</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

第一行输出,当我运行程序:

Exception in thread "main" org.renjin.eval.EvalException: IOException while loading package org.renjin.cran:RWeka: could not find function '.jfield' 

在此先感谢!

+0

你能显示你的代码吗? – SilverNak

+0

忘记把我的代码之前,第一次noob,修复! – dFont

回答

0

人人尚未完全支持rJava软件包。似乎缺少的东西之一是.jfield的包装。你可以在这里找到兼容性层:

https://github.com/bedatadriven/renjin-rjava/blob/master/src/main/R/rJava.R

引入请求的欢迎!

+0

所以,除非有人做包装,否则我无能为力,因为我认为我还没有这方面的技能。 不过,关于其他包装器的实现有一些例子吗?也许我可以尝试去做。 感谢您的回复! – dFont