1

对于一个大学项目,我必须在 java 中实现 arules(R 包)。我已经使用 JRI 成功集成了 R 和 java。我不明白如何获得“ inspect(Groceries[1:1])”的输出。我试过了,asString(),asString[]()但这给了我以下错误:

Exception in thread "main" java.lang.NullPointerException
at TestR.main(TestR.java:11)

另外,如何summary(Groceries)在java中实现?如何在字符串数组或字符串中获取摘要的输出?

代码:

>data(Groceries)
>inspect(Groceries[1:1])
>summary(Groceries)

Java代码:

import org.rosuda.JRI.Rengine;
import org.rosuda.JRI.REXP;

public class TestR {
    public static void main(String[] args){
    Rengine re = new Rengine(new String[]{"--no-save"}, false, null);

    re.eval("library(arules)");
    re.eval("data(Groceries)");
    REXP result = re.eval("inspect(Groceries[1:1])");

    System.out.println(result.asString());
    }

}
4

1 回答 1

0

看来inspectpkg:arules 中的函数返回 NULL。您看到的输出是“副作用”。您可以尝试“捕获输出”,但这未经测试,因为我没有跨语言集成的经验。改为尝试。:

REXP result = re.eval("capture.output( inspect(Groceries[1:1]) )");

在 R 控制台会话中,您将获得:

library(arules)
data("Adult")
rules <- apriori(Adult)
val <- inspect(rules[1000])

> str(val)
 NULL
> val.co <- capture.output(inspect(rules[1000]))
> val.co
[1] "  lhs                         rhs                              support confidence     lift"
[2] "1 {education=Some-college,                                                                "
[3] "   sex=Male,                                                                              "
[4] "   capital-loss=None}      => {native-country=United-States} 0.1208181  0.9256471 1.031449"

但我没有在非交互式会话中测试过这个。可能需要对 , ... 的file参数进行处理capture.output,否则它可能根本不起作用。

于 2016-01-09T18:20:40.480 回答