我想从一个叫做kruskalmc的方法中得到结果。
R控制台中的结果如下所示:
Multiple comparison test after Kruskal-Wallis
p.value: 0.05
Comparisons
obs.dif critical.dif difference
1-2 7.65 9.425108 FALSE
1-3 14.40 9.425108 TRUE
2-3 6.75 9.425108 FALSE现在,我想从difference列中获取值。
如果我尝试在java中获得它,则使用:
REXP res = re.eval("result$dif.com$difference");我会得到像这样的东西: BOOLi*
如何在java中遍历BOOLi对象?
我想要的是值FALSE,TRUE,FALSE。
发布于 2013-04-15 21:10:45
我不经常使用JRI,但由于没有人回答您,我将尝试使用它。
我可能错了,但似乎没有将res转换为布尔型数组的方法--尽管有转换为int[]、double[]和String[]的方法。您可以将结果转换为整数,如下所示:
REXP res = re.eval("result$dif.com$difference");
int[] x = res.asIntArray();
for (int i = 0; i < x.length; i++) {
System.out.println(x[i]);
}您将得到表示TRUE值的1和表示FALSE的0。如果需要,您可以从Java将这些数字转换为布尔值,或者按原样使用它们。
这不是一个理想的解决方案,所以我希望有人能想出更好的解决方案。
发布于 2013-04-15 23:08:42
据我所知,问题出在从R导出到java时的类型转换。查看JRI的documentation的一部分:
当前支持的对象有字符串、整数和数值向量。
给出一个可重现的例子(来自函数本身的文档):
require(pgirmess)
resp <-c(0.44,0.44,0.54,0.32,0.21,0.28,0.7,0.77,0.48,0.64,0.71,0.75,0.8,0.76,0.34,0.80,0.73,0.8)
categ <- as.factor(rep(c("A","B","C"),times=1,each=6))
k1 <- kruskalmc(resp, categ)然后我们可以看到is.logical(k1[[3]][,3]) == TRUE:
> str(k1[[3]][,3])
logi [1:3] FALSE TRUE FALSE虽然仍然在R中,但最简单的方法似乎是将其转换为
> as.numeric(k1[[3]][,3])
[1] 0 1 0或者,您可以将其作为字符发送:
> as.character(k1[[3]][,3])
[1] "FALSE" "TRUE" "FALSE"一旦在java中,你会想要将它转换回布尔值,或者任何你正在处理的最终形式。
发布于 2015-01-20 13:44:21
呼叫:
survdiff(formula = model)
N Observed Expected (O-E)^2/E (O-E)^2/V
x[, 1]=G1:Vehicle 8 6 2.65 4.22 9.02
x[, 1]=G2:AZ13655037 15mg/kg/qd 8 0 3.35 3.35 9.02在1个自由度上的Chisq= 9,p= 0.00267,现在我们想要从p中得到值,我如何在java中得到它?
https://stackoverflow.com/questions/16011136
复制相似问题