我在使用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
我尝试了所有可以使用的功能,但似乎没有任何效果。它总是吐出一个字符串或对象或其他什么,我无法确定问题。
我很欣赏任何提示。 :)
答案 0 :(得分:1)
dbGetQuery
的输出是data.frame
,这是一个列表。对于您的查询,它是长度为一的列表。您应该获取该列表的第一个元素,即矢量,并从中获取要显示的单个元素。尝试类似:
double[] result_a = re.eval("dbGetQuery(conn, \"select movies_id from movies\")").asList().at(0).asDoubleArray();
这样,result_a
应该是一个常规的java双数组,你可以打印它的值。