我想从一个名为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
现在我想从差异列中获取值。
如果我尝试在java中使用:
REXP res = re.eval("result$dif.com$difference");
我会得到这样的东西:[BOOLi *]
如何在java中的BOOLi对象中进行迭代?
我想要的是值FALSE TRUE FALSE。
答案 0 :(得分:1)
我没有使用过JRI,但是由于没有人回答你,我会去寻找它。
我可能错了,但似乎没有将res
转换为布尔数组的方法 - 尽管有转换为int[]
,double[]
和{{1}的方法}。您可以将结果转换为这样的整数:
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]);
}
值的1
和代表TRUE
的{{1}}。你可以将这些数字转换为布尔值,如果你想从Java那里转换,或者只是按原样使用它们。
不是理想的解决方案,所以我希望有人能提出更好的解决方案。
答案 1 :(得分:1)
据我所知,问题是从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
后,您需要将其转换回布尔值,或者您正在使用的最终形式。
答案 2 :(得分:0)
呼叫:
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中获得它?