首页 > 解决方案 > 从 R 调用 Java 的方法

问题描述

试图从 R 调用 Java 方法。我已经为 Java-Gremlin 接口编写了 Java 代码,效果很好。但现在我想调用 R 的方法,所以作为回报,我将从 gremlin 查询中获取输出数据,然后我可以分析数据。但是在R中的'.jcall()'命令中,出现错误,因此无法调用R中的方法。以下是编写的java代码。

import java.util.Map;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;

public class TinkerGraphTest2 {

    TinkerGraph tg = null;
    GraphTraversalSource g = null;
    
    public static void main(String[] args) {
        
        // TODO Auto-generated method stub
        TinkerGraph tg = TinkerGraph.open() ;
        System.out.println("Welcome to Eclipse");
        try
        {
            GraphTraversalSource g = tg.traversal();
            g.io("D:\\PID\\data\\air-routes.xml").read().iterate();
            
            
        }
        catch( Exception e )
        {
            System.out.println("File not found");
            System.out.println(e);
            System.exit(1);
        }
        
    }
    
    public String getDallasRoutes(String country) {
        Long n = g.V().has("code",country).out().count().next();
        return("There are " + n + " routes from" +  country);
    }

    public Map<?, ?> getDetailsofAirports() {
        Map<?,?> aus = g.V().has("code","AUS").valueMap().next();
        System.out.println(aus.toString());
        
        @SuppressWarnings("rawtypes")
        List city = (List)(aus.get("city"));
        System.out.println("The AUS airport is in " + city.get(0));
        
        aus.forEach( (k,v) -> System.out.println("Key: " + k + ": Value: " + v));
        return aus;
        
    }
    
}

该代码运行良好并获得了预期的输出。R代码调用方法getDallasRoutes()。在'.jcall()'中出现错误

library(rJava)
.jinit()
cl_path="....."
.jaddClassPath(cl_path)
test=.jnew("TinkerGraphTest2")
x=.jcall(test,returnSig = "S",method="getDallasRoutes","AUS")

##Error in .jcall(test, returnSig = "S", method = "getDallasRoutes", "AUS") : 
  java.lang.NoClassDefFoundError: org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource

#tried another command also 
p=J("TinkerGraphTest2","getDallasRoutes","AUS")
#Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  : 
  java.lang.IllegalArgumentException: object is not an instance of declaring class

你能建议我任何解决方案吗?这将有很大的帮助!

标签: javar

解决方案


推荐阅读