1

我想从一种叫做 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 - 我如何在java中的BOOLi对象中迭代?

我想要的是值 FALSE TRUE FALSE。

4

3 回答 3

1

我没有太多使用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]);
}

您将返回1代表TRUE值和0代表FALSE。如果你想从 Java 中将这些数字转换为布尔值,或者直接使用它们,你可以将它们转换为布尔值。

不是一个理想的解决方案,所以我希望有人提出更好的解决方案。

于 2013-04-15T13:10:44.673 回答
1

据我所见,问题是从Rto导出时的类型转换java。查看 JRI的部分文档:

当前支持的对象是字符串、整数和数字向量。

举一个可重现的例子(来自函数自己的文档):

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您需要将其转换回布尔值或您正在使用的任何最终形式。

于 2013-04-15T15:08:42.343 回答
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

Chisq= 9 on 1 自由度,p= 0.00267 现在我们要从 p 中获取值。我怎样才能在java中得到它?

于 2015-01-20T05:44:21.250 回答