从Java集成JRI R,有些语句不起作用吗?

时间:2014-03-27 16:11:35

标签: java r jri

如果我在R中创建一个数据框,我可以删除其中一个列:

testset[,-7]  # drops the 7th column

虽然我可以使用JRI创建数据框,但我无法从Java执行相同的操作:

REXP df = REXPGenericVector(new RList(new REXP[] { ... })); //details left out
// REngine previously contructed
engine.assign("testset",df); // works
engine.parseAndEval("testset"); // works, returns an REXP with the data frame I just created
engine.parseAndEval("testset[,-7]"); // broken, returns org.rosuda.REngine.REXPNull

类似地,如果我使用简单的解析/ eval语句复制R中的代码,它们似乎会在某些语句中出现。以下是支持向量机训练/预测的示例

engine.parseAndEval("svm.model <- svm(Class ~ ., data = trainset, cost = 100, gamma = 1)");
engine.parseAndEval("svm.pred <- predict(svm.model, testset_noclass)"); // testset_noclass same as testset, except without a column
REXP r = engine.parseAndEval("svm.pred"); // r is a  org.rosuda.REngine.REXPNull

1 个答案:

答案 0 :(得分:0)

查看类Rengine的文档http://www.rosuda.org/r/nightly/javadoc/org/rosuda/JRI/Rengine.html,似乎没有显示方法“parseAndEval”,只显示“eval”。请注意,有两个R引擎,(2个抽象),一个是JRI的一部分(似乎是你正在使用的)和另一个,它是org.rosuda.REngine的一部分(这个包含方法“parseAndEval”) “)。