【问题标题】:R JRI: trying to create data.frames from Java using REXP.createDataFrameR JRI:尝试使用 REXP.createDataFrame 从 Java 创建 data.frames
【发布时间】:2015-03-16 19:26:17
【问题描述】:

我正在尝试在 R 中创建一个数据框,从 Java 中的 ArrayList 中获取数据。

下面的代码似乎是官方 JRI 测试套件 (see this link) 但它甚至无法编译,例如在第一条语句中 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.REXPorg.rosuda.REngine.REXP,后者有createDataFrame(l)的方法,但是赋值不起作用。如何将数据框分配给 R 变量?

【问题讨论】:

  • 你有没有注意到“org.rosuda.JRI.RList”中没有“put”方法?
  • 查看我发布的链接并导出相同的库

标签: java r rjava jri


【解决方案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)");

在 Eclipse 控制台中:

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

【讨论】:

    猜你喜欢
    • 2011-11-02
    • 2015-11-18
    • 2014-09-13
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2018-01-17
    相关资源
    最近更新 更多