运行 来自 java 的 rscript 没有显示任何结果
Running rscript from java doesnt show any result
我正在使用 Rserve 从 java 调用 r 脚本。该程序运行并终止但不输出我想要的内容。在我的 R 脚本中,我有多个打印语句,所以理论上,当我的 java 程序运行时,它应该打印这些语句。但是我的 java 程序正在打印我的 rscript 的路径,而不是实际的 r 脚本内容。
我应该怎么做?我如何知道我的脚本 运行 是否正确?
R 脚本:
library(Rserve)
Rserve()
print(323325)
print("Hellow world this is an R script")
print("R script ran successfully")
print("Running")
Java 程序:
public static void main(String[] args) throws REXPMismatchException, REngineException{
RConnection c = new RConnection();
//REXP rengine = c.eval("R.version.string");
//rengine = c.eval("source('./src/main/resources/Script/DB.R')");
//System.out.println(rengine.asString());
REXP rResponseObject = c.parseAndEval("try(eval('./src/main/resources/Script/DB.R'),silent=TRUE)");
System.out.println(rResponseObject.asString());
if (rResponseObject.inherits("try-error")) {
System.err.println("Error: " + rResponseObject.asString());
}
}
实际输出:
./src/main/resources/Script/DB.R
期望的输出:
[1] "Hellow world this is an R script"
[1] "R script ran successfully"
[1] "Running"
eval
计算一个表达式。 './src/main/resources/Script/DB.R'
是一个计算结果为自身的常量字符串。
您可能想要的是 source
。
我解决了这个问题。我的 r 脚本现在 运行 正确并执行了它应该执行的操作。
在我的 r 脚本文件中,我创建了一个函数并将我的整个 r 代码放入该函数中
在我的 java 程序中,我给出了我的 r 脚本的路径:
c.eval("source(\"DataPull.R\")");
然后我调用了我的 r 脚本的函数并检查了这样的错误:
REXP r = c.parseAndEval("try(eval(myAdd()),silent=TRUE)");
if (r.inherits("try-error")) System.err.println("Error: "+r.asString());
else System.out.println("Success eval 2");
成功了。
这是我的 java 程序文件:
public static void main(String[] args) throws REXPMismatchException, REngineException, IOException{
RConnection c = new RConnection();
c.eval("source(\"DataPull.R\")");
REXP r = c.parseAndEval("try(eval(myAdd()),silent=TRUE)");
if (r.inherits("try-error")) System.err.println("Error: "+r.asString());
else System.out.println("Success eval 2");
}
这是我的 r 脚本文件:
myAdd <- function(){
library(Rserve)
Rserve()
print(323325)
print("Hellow world this is an R script")
print("R script ran successfully")
print("Running")
}
我正在使用 Rserve 从 java 调用 r 脚本。该程序运行并终止但不输出我想要的内容。在我的 R 脚本中,我有多个打印语句,所以理论上,当我的 java 程序运行时,它应该打印这些语句。但是我的 java 程序正在打印我的 rscript 的路径,而不是实际的 r 脚本内容。
我应该怎么做?我如何知道我的脚本 运行 是否正确?
R 脚本:
library(Rserve)
Rserve()
print(323325)
print("Hellow world this is an R script")
print("R script ran successfully")
print("Running")
Java 程序:
public static void main(String[] args) throws REXPMismatchException, REngineException{
RConnection c = new RConnection();
//REXP rengine = c.eval("R.version.string");
//rengine = c.eval("source('./src/main/resources/Script/DB.R')");
//System.out.println(rengine.asString());
REXP rResponseObject = c.parseAndEval("try(eval('./src/main/resources/Script/DB.R'),silent=TRUE)");
System.out.println(rResponseObject.asString());
if (rResponseObject.inherits("try-error")) {
System.err.println("Error: " + rResponseObject.asString());
}
}
实际输出:
./src/main/resources/Script/DB.R
期望的输出:
[1] "Hellow world this is an R script" [1] "R script ran successfully" [1] "Running"
eval
计算一个表达式。 './src/main/resources/Script/DB.R'
是一个计算结果为自身的常量字符串。
您可能想要的是 source
。
我解决了这个问题。我的 r 脚本现在 运行 正确并执行了它应该执行的操作。
在我的 r 脚本文件中,我创建了一个函数并将我的整个 r 代码放入该函数中
在我的 java 程序中,我给出了我的 r 脚本的路径:
c.eval("source(\"DataPull.R\")");
然后我调用了我的 r 脚本的函数并检查了这样的错误:
REXP r = c.parseAndEval("try(eval(myAdd()),silent=TRUE)");
if (r.inherits("try-error")) System.err.println("Error: "+r.asString());
else System.out.println("Success eval 2");
成功了。
这是我的 java 程序文件:
public static void main(String[] args) throws REXPMismatchException, REngineException, IOException{
RConnection c = new RConnection();
c.eval("source(\"DataPull.R\")");
REXP r = c.parseAndEval("try(eval(myAdd()),silent=TRUE)");
if (r.inherits("try-error")) System.err.println("Error: "+r.asString());
else System.out.println("Success eval 2");
}
这是我的 r 脚本文件:
myAdd <- function(){
library(Rserve)
Rserve()
print(323325)
print("Hellow world this is an R script")
print("R script ran successfully")
print("Running")
}