R JRI:尝试使用 REXP.createDataFrame 从 Java 创建 data.frames
R JRI: trying to create data.frames from Java using REXP.createDataFrame
我试图在 R 中创建一个数据框,从 Java 中的 ArrayList 获取数据。
下面的代码似乎是官方的 JRI 测试套件 (see this link) 但是它甚至不能编译,例如在第一条语句中 RList 没有 put 方法并且 REXP.createDataFrame 方法不存在。
REXP.createDataFrame
有更新的例子吗?无法在线找到 concrete/functional 示例。另外,找不到任何 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 变量?
如果有帮助:我使用 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
我试图在 R 中创建一个数据框,从 Java 中的 ArrayList 获取数据。
下面的代码似乎是官方的 JRI 测试套件 (see this link) 但是它甚至不能编译,例如在第一条语句中 RList 没有 put 方法并且 REXP.createDataFrame 方法不存在。
REXP.createDataFrame
有更新的例子吗?无法在线找到 concrete/functional 示例。另外,找不到任何 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 变量?
如果有帮助:我使用 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