Search code examples
renjin

NoSuchMethodError org.renjin.gnur.api.Utils.R_qsort_I


Trying to execute RandomForest on sample dataset, but facing method was not found issue as below.

Using the below libraries.

Using these external libraries. bitops-1.0-6-b237.jar caTools-1.17.1-b220.jar renjin-script-engine-3.5-beta65-jar-with-dependencies.jar gcc-runtime-0.8.1938.jar rpart-4.1-10-b20.jar

Executing the RandomForest classification algorithm with this code.

RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
        ScriptEngine engine = factory.getScriptEngine();
        engine.eval("dataset = read.csv('Social_Network_Ads.csv')");
        engine.eval("dataset = dataset[3:5]");
        engine.eval("dataset$Purchased = factor(dataset$Purchased, levels = c(0, 1))");
        engine.eval("library(caTools)");
        engine.eval("set.seed(123)");
        engine.eval("split = sample.split(dataset$Purchased, SplitRatio = 0.75)");
        engine.eval("training_set = subset(dataset, split == TRUE)");
        engine.eval("test_set = subset(dataset, split == FALSE)");
        engine.eval("training_set[-3] = scale(training_set[-3])");
        engine.eval("test_set[-3] = scale(test_set[-3])");
        engine.eval("library(randomForest)");
        engine.eval("set.seed(123)");
        engine.eval("classifier = randomForest(x = training_set[-3], y = training_set$Purchased, ntree = 10)");
        engine.eval("y_pred = predict(classifier, newdata = test_set[-3])");

Getting the exception below

Exception in thread "main" org.renjin.eval.EvalException: org.renjin.gnur.api.Utils.R_qsort_I(Lorg/renjin/gcc/runtime/DoublePtr;Lorg/renjin/gcc/runtime/IntPtr;II)V
    at org.renjin.sexp.Closure.applyPromised(Closure.java:212)
    at org.renjin.primitives.special.UseMethod.apply(UseMethod.java:166)
    at org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80)
    at org.renjin.sexp.Closure.applyPromised(Closure.java:200)
    at org.renjin.sexp.Closure.apply(Closure.java:133)
    at org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80)
    at org.renjin.primitives.special.AssignLeftFunction.assignLeft(AssignLeftFunction.java:58)
    at org.renjin.primitives.special.AssignLeftFunction.apply(AssignLeftFunction.java:42)
    at org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80)
    at org.renjin.sexp.ExpressionVector.eval(ExpressionVector.java:85)
    at org.renjin.eval.Context.evaluate(Context.java:280)
    at org.renjin.script.RenjinScriptEngine.eval(RenjinScriptEngine.java:174)
    at org.renjin.script.RenjinScriptEngine.eval(RenjinScriptEngine.java:133)
    at RTest.main(RTest.java:33)
Caused by: java.lang.NoSuchMethodError: org.renjin.gnur.api.Utils.R_qsort_I(Lorg/renjin/gcc/runtime/DoublePtr;Lorg/renjin/gcc/runtime/IntPtr;II)V
    at org.renjin.cran.randomForest.rfutils__.makeA(rfutils.c:76)
    at org.renjin.cran.randomForest.rf__.classRF(rf.c:218)
    at org.renjin.cran.randomForest.randomForest.classRF(Unknown Source)
    at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
    at org.renjin.primitives.Native.dotC(Native.java:190)
    at org.renjin.primitives.R$primitive$$C.applyPromised(R$primitive$$C.java:69)
    at org.renjin.sexp.BuiltinFunction.apply(BuiltinFunction.java:100)
    at org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80)
    at org.renjin.sexp.Promise.doEval(Promise.java:87)
    at org.renjin.sexp.Promise.force(Promise.java:81)
    at org.renjin.primitives.R$primitive$$bracket.applyPromised(R$primitive$$bracket.java:34)
    at org.renjin.sexp.BuiltinFunction.apply(BuiltinFunction.java:100)
    at org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80)
    at org.renjin.primitives.special.AssignLeftFunction.assignLeft(AssignLeftFunction.java:58)
    at org.renjin.primitives.special.AssignLeftFunction.apply(AssignLeftFunction.java:42)
    at org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80)
    at org.renjin.primitives.special.BeginFunction.apply(BeginFunction.java:39)
    at org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80)
    at org.renjin.primitives.special.IfFunction.apply(IfFunction.java:40)
    at org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80)
    at org.renjin.primitives.special.BeginFunction.apply(BeginFunction.java:39)
    at org.renjin.sexp.FunctionCall.eval(FunctionCall.java:80)
    at org.renjin.sexp.Closure.applyPromised(Closure.java:200)
    ... 13 more

Solution

  • It looks like there are some binary incompatiblities between the new 3.5 beta builds and packages built for Renjin 0.9. For the time being, using Renjin 0.9.2726 should avoid the problem.

    Renjin 3.5 should be released before the end of September and will include new builds for all CRAN+BioConductor packages.