【问题标题】:Running rscript from java doesnt show any result从java运行rscript不显示任何结果
【发布时间】:2017-05-30 04:00:11
【问题描述】:

我正在使用 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 这是一个 R 脚本" [1] “R 脚本运行成功” [1] 《奔跑》

【问题讨论】:

    标签: java r rserve


    【解决方案1】:

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

    你可能想要的是source

    【讨论】:

    • 我在 eval 语句中添加了源代码。但现在它给了我这样的输出: source("C:\Users\Ruttab\workspace\RServe\src\main\resources\Script\DB.R")
    • 不,你应该使用 source_instead_of_eval。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多