我很好奇是否可以将Java对象(任何类型(java / class / jar))路径到REngine?到目前为止,我已经成功地执行了从Java到R的操作,反之亦然。例如:我有我在RStudio中使用的自定义jar文件,我也希望Java代码也有同样的机会。
以上代码来自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());
答案 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是程序包名称。