从Java运行r脚本没有显示任何结果

3
我将使用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] "你好,世界,这是一个R脚本" [1] "R脚本运行成功" [1] "运行中"

2个回答

0

eval 用于计算表达式。 './src/main/resources/Script/DB.R' 是一个常量字符串,它的值为它本身。

你可能想要使用的是 source


我在我的eval语句中添加了源代码。但现在它给我输出的结果是这样的:source("C:\Users\Ruttab\workspace\RServe\src\main\resources\Script\DB.R")。 - R. Haroon
不,你应该使用source_instead_of_eval。 - Igor F.

0

我解决了这个问题。我的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")   
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接