从java运行rscript不显示任何结果
问题描述:
我正在使用Rserve从java调用r脚本。该程序运行并终止,但不输出我想要的。在我的R脚本中,我有多个打印语句,所以理论上当我的java程序运行时,它应该打印这些语句。但是我的java程序正在打印我rscript的路径,而不是实际的r脚本内容。从java运行rscript不显示任何结果
我该怎么办?我如何知道我的脚本是否正确运行?
ř脚本:
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世界这是R脚本” [1] “R脚本成功运行” [1] “运行”
答
我解决了这个问题。我的脚本现在正在正确运行并执行它应该执行的操作。
在我的[R脚本文件,我创建了一个功能,并将该功能
内我整个R代码里面。在我的java程序,我给这样的我 - [R脚本的路径:
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");
它的工作。
这里是我的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")
}
答
eval
计算表达式。是一个评估自己的常量字符串。
你可能想要的是source
。
我在eval语句添加源。但是现在它给了我这样的输出:source(“C:\ Users \ Ruttab \ workspace \ RServe \ src \ main \ resources \ Script \ DB.R”) –
不,您应该使用source_instead_of_ eval。 –