JRI REXP布尔值

时间:2013-04-15 08:50:44

标签: java r rjava jri

我想从一个名为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。

3 个答案:

答案 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中获得它?