0

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

当我把 R 命令是一个单独的文件时,这些文档的第 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 给出了错误。

4

1 回答 1

0

该代码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 语法,但不是您想要的。

于 2016-06-23T09:03:53.627 回答