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