RVector / REXP到ArrayList

时间:2014-09-16 05:39:31

标签: r arraylist jri

我在使用JRI-Package时遇到了一些麻烦。基本上我是用Java编程的,我用RJDBC通过R访问SQL数据库。 无论如何,我的问题更多的是R / JRI问题,而不是其他任何问题,我只是不希望你感到困惑。

我的代码:

RVector result_a = re.eval("dbGetQuery(conn, \"select movies_id from movies\")").asVector();
REXP result_b = re.eval("dbGetQuery(conn, \"select movies_id from movies\")");
System.out.println(result_a.firstElement());
List<Object> S = Arrays.asList(result_a.get(0));
for(int i = 0; i < S.size(); i++) {
    System.out.println("Nr. " + i + ": " + S.get(i));
}
System.out.println(result_b.getContent());

输出:

[REAL* (1.0, 2.0, 3.0, 4.0, 5.0)]
Nr. 0: [REAL* (1.0, 2.0, 3.0, 4.0, 5.0)]
[[REAL* (1.0, 2.0, 3.0, 4.0, 5.0)]]

问题是,由于某种原因,对象REXP(以及RVector,虽然未显示)被双括号(打印时)覆盖。我想,它是向量中的向量?实际问题:数据在一个地方被压缩,我希望它是这样的:

Nr. 0: 1.0
Nr. 1: 2.0
Nr. 2: 3.0
Nr. 3: 4.0
Nr. 4: 5.0

我尝试了所有可以使用的功能,但似乎没有任何效果。它总是吐出一个字符串或对象或其他什么,我无法确定问题。

我很欣赏任何提示。 :)

1 个答案:

答案 0 :(得分:1)

dbGetQuery的输出是data.frame,这是一个列表。对于您的查询,它是长度为一的列表。您应该获取该列表的第一个元素,即矢量,并从中获取要显示的单个元素。尝试类似:

  double[] result_a = re.eval("dbGetQuery(conn, \"select movies_id from movies\")").asList().at(0).asDoubleArray();  

这样,result_a应该是一个常规的java双数组,你可以打印它的值。