R JRI: попытка создать data.frames из Java с помощью REXP.createDataFrame

Я пытаюсь создать фрейм данных в R, беря данные из ArrayList в Java.

Код ниже, кажется, является официальным набором тестов JRI ( см. Эту ссылку), однако он даже не компилируется, например, в первом утверждении RList не имеет метода put и метода REXP.createDataFrame не существует.

Есть ли обновленный пример REXP.createDataFrame? Не удалось найти конкретный / функциональный пример в Интернете. Также не удалось найти документацию по JRI.

     String[] Rargs = {"--vanilla"};
     Rengine re = new Rengine(Rargs, false, null);

     if (!re.waitForR()) {
         System.out.println("Cannot load R");
         return;
     }

     RList l = new RList();
     l.put("a",new REXPInteger(new int[] { 0,1,2,3}));
     l.put("b",new REXPDouble(new double[] { 0.5,1.2,2.3,3.0}));

     re.assign("z", REXP.createDataFrame(l));

     REXP x = re.parseAndEval("z");
     System.out.println("  z = " + x);

ОБНОВИТЬ

Я узнал, что есть два REXP классы org.rosuda.JRI.REXP а также org.rosuda.REngine.REXPпоследний имеет метод createDataFrame(l)Однако назначение не работает. Как привязать фрейм данных к переменной R?

1 ответ

Решение

Если это поможет: мое решение для создания фрейма данных с JRI-REngine дает что-то вроде этого:

    String[] dummyArgs = {"--vanilla"};
    REngine eng = REngine.engineForClass("org.rosuda.REngine.JRI.JRIEngine", dummyArgs, new REngineStdOutput (), false); // debug mode, print R-trace in Java

    String[] colNames = {"col1", "col2", "col3"};
    String[] col1 = {"a1", "a2", "a3", "a4"};
    String[] col2 = {"b1", "b2", "b3", "b4"};
    int[] col3 = {1, 2, 3, 4};

    REXP mydf = REXP
                .createDataFrame(new RList(
                        new REXP[] {
                                new REXPString(col1),
                                new REXPString(col2),
                                new REXPInteger(col3)},
                        colNames));

    eng.assign("myDataFrame", mydf);

    eng.parseAndEval("print(myDataFrame)");

В консоли затмения:

col1 col2 col3 1 a1 b1 1 2 a2 b2 2 3 a3 b3 3 4 a4 b4 4

Другие вопросы по тегам