Renjin 找不到函数'engine.eval

Renjin could not find function 'engine.eval

我是 运行 Java Linux (CentOS),通过命令行。

当我把R命令放在一个单独的文件中时,在these docs,

的第1.4节中有描述

我收到错误:

Exception in thread "main" org.renjin.eval.EvalException: could not
find function 'engine.eval'
    at org.renjin.eval.Context.evaluateFunction(Context.java:269)
    at org.renjin.eval.Context.evaluateCall(Context.java:260)
    at org.renjin.eval.Context.evaluate(Context.java:193)
    at org.renjin.eval.Context.evaluateExpressionVector(Context.java:252)
    at org.renjin.eval.Context.evaluate(Context.java:191)
    at org.renjin.script.RenjinScriptEngine.eval(RenjinScriptEngine.java:131)
    at org.renjin.script.RenjinScriptEngine.eval(RenjinScriptEngine.java:127)
    at org.renjin.script.RenjinScriptEngine.eval(RenjinScriptEngine.java:107)
    at pkg3.Temp3.main(Temp3.java:31)

CLASSPATH 设置正确,因为:

cd ~/rjtest
javac pkg3/Temp3.java

cd ~/rjtest
java pkg3.Temp3

产生:

   x      y
 1  1      1.121
 2  2      0.525
 3  3      1.811
 4  4      1.914
 5  5      5.389
 6  6      8.501
 7  7      6.477
 8  8      7.805
 9  9      8.625
10 10     10.033

Call:
lm(formula = y ~ x, data = df)

Coefficients:
(Intercept) x
-0.902       1.113

修改代码以将 3 个 engine.eval 语句移动到 script.R:

// engine.eval("df <- data.frame(x=1:10, y=(1:10)+rnorm(n=10))");
// engine.eval("print(df)");
// engine.eval("print(lm(y ~ x, df))");

engine.eval(new java.io.FileReader("/pathto/rjtest/pkg3/script.R"));

javac 编译没有错误,但是 java 给出了错误。

代码engine.eval()是一个Java语句。你得到的异常是 Renjin 告诉你没有 R 函数叫做 engine.eval。您的 script.R 应包含:

df <- data.frame(x=1:10, y=(1:10)+rnorm(n=10))
print(df)
print(lm(y ~ x, df))"

不是:

engine.eval("df <- data.frame(x=1:10, y=(1:10)+rnorm(n=10))")
engine.eval("print(df)");
engine.eval("print(lm(y ~ x, df))")

巧合的是,这是有效的 R 语法,但不是您想要的。