Пользовательские объекты Java в REngine - PullRequest
0 голосов
/ 14 марта 2019

Мне любопытно, можно ли направить объект Java (в любом типе (java / class / jar)) в REngine? до сих пор я успешно выполняю операцию из Java в R или наоборот. например: у меня есть свои пользовательские jar-файлы, которые я использую в RStudio, я хочу иметь такую ​​же возможность и из 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 голосов
/ 11 апреля 2019

я отвечу на мой вопрос.если кто-то заинтересован в ответе.таким образом, чтобы направить объект 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 точно так же, как вы делаете это в консоли R или RStudio, просто поместите его в фигурные скобки.

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 - это имя пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...