1

R でデータ フレームを作成すると、次のように列の 1 つを削除できます。

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」のみが表示されるようです. 2 つの R エンジン (2 つの抽象化) があることに注意してください。1 つは JRI の一部であり (これはあなたが使用しているものと思われます)、もう 1 つは org.rosuda.REngine の一部です (これにはメソッド "parseAndEval が含まれています)。 」)。

于 2014-03-30T06:09:31.883 に答える