REngine中的自定义Java对象

时间:2019-03-14 14:29:59

标签: java rstudio

我很好奇是否可以将Java对象(任何类型(java / class / jar))路径到REngine?到目前为止,我已经成功地执行了从Java到R的操作,反之亦然。例如:我有我在RStudio中使用的自定义jar文件,我也希望Java代码也有同样的机会。 enter image description here

以上代码来自RStudio

下面的代码来自Java

    String javaVector="c(1,2,3,4,5)";
    Rengine rengine = new Rengine(new String[]{"-no-save"}, false, null);
    rengine.eval("rVector <-"+javaVector);
    rengine.eval("meanVal=mean(rVector)");
    double mean = rengine.eval("meanVal").asDouble();
    REXP rexp = rengine.eval("meanVal");
    System.out.println("Mean of given vector is <-"+mean);
    rengine.eval(String.format("greeting <- '%s'", "Hello R World"));
    REXP result = rengine.eval("greeting");
    System.out.println("Greeting from R: "+result.asString());

1 个答案:

答案 0 :(得分:0)

我会回答我的问题。如果有人对答案感兴趣。因此,要将Java对象从Java代码路径转换为R脚本,您可以执行以下操作:首先选择您要使用的对象,例如:

public class RAccess{
static public Object getObject(String id){
    return test;
}

static TestClass test = new TestClass();

}

public class TestClass{
String message;
public void setMessage(String value){

    message = value;
}

}

完全像在R控制台或RStudio中那样评估R脚本后,只需将其放在花括号中即可。

REXP x = re.eval(rCode3);

    System.out.println(RAccess.test.message);

    static String rCode3 =
            "{ \n" +
                    "library(rJava) \n" +
                    ".jinit() \n" +
                    "obj <- .jcall(\"jriTest/RAccess\", \"Ljava/lang/Object;\", \"getObject\", \"id\") \n" +
                    ".jcall(obj, \"V\", \"setMessage\", \"hello from R\") \n" +
                    "}";

jriTest是程序包名称。