Интеграция JRI R из java, некоторые операторы не работают?

Если я создам фрейм данных в 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

Точно так же, если я реплицирую код, который у меня есть в R, с помощью простых операторов parse/eval, они, похоже, не работают с некоторыми операторами. Ниже приведен пример обучения/прогноза машины опорных векторов.

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

person Manish Patel    schedule 27.03.2014    source источник


Ответы (1)


глядя на документацию класса Rengine, http://www.rosuda.org/r/nightly/javadoc/org/rosuda/JRI/Rengine.html не показывает метод «parseAndEval», только «eval». Обратите внимание, что есть два механизма R (две абстракции), один из которых является частью JRI (который, кажется, вы используете), а другой является частью org.rosuda.REngine (этот содержит метод «parseAndEval ").

person Yehoshaphat Schellekens    schedule 30.03.2014
comment
Есть два класса Rengine и REngine, который является оболочкой для первого. Класс REngine имеет метод. - person Manish Patel; 31.03.2014