1

如果我在 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

同样,如果我使用简单的 parse/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
4

1 回答 1

0

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

于 2014-03-30T06:09:31.883 回答