人人无法找到函数'engine.eval

时间:2016-06-22 16:26:33

标签: renjin

我通过命令行在Linux(CentOS)上运行Java。

当我把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给出了错误。

1 个答案:

答案 0 :(得分:0)

代码engine.eval() Java 语句。你得到的例外是Renjin告诉你没有名为engine.eval R 函数。你的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语法,但不是你想要的。