Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Rscript中声明全局变量并从Java调用它_Java_R_Rserve - Fatal编程技术网

如何在Rscript中声明全局变量并从Java调用它

如何在Rscript中声明全局变量并从Java调用它,java,r,rserve,Java,R,Rserve,我有一个Rscript myrscript.R,它有下面的代码 if(exists("e")==FALSE) { e = new.env() } myfun1<-function(file_path) { mydata<-read.csv(file_path) e$mydata1 =mydata return("firstfunction") } myfun2<-function() { e$mydata1 names_mydata<-

我有一个Rscript myrscript.R,它有下面的代码

if(exists("e")==FALSE)
{
  e = new.env()
}

myfun1<-function(file_path)
{
  mydata<-read.csv(file_path)

  e$mydata1 =mydata

  return("firstfunction")
}

myfun2<-function()
{
  e$mydata1  
  names_mydata<-colnames(e$mydata1)  
  nm<-names_mydata[1]

  return(nm)
}

当从java运行这个时。这是一个错误。出现错误的原因是,在调用R脚本的第二个函数时,全局变量e$mydata1的值未初始化,为null。但它不应该这样做。我在R控制台中运行了脚本文件的代码。它运转良好。但是,当从java调用时,为什么全局变量不起作用呢。是否有其他解决方案。

您每次都在创建一个新连接,因此呼叫是完全独立的。也就是说,在
myfun_3
中,您启动一个空的、新的R会话,因此预计它不会加载任何数据。如果希望函数在同一个会话上工作,则必须使用相同的
R连接
对象。

myfun2
接受参数
文件路径
,该参数不是有效的R变量名。很抱歉,键入的是错误。实际上,上面的代码只是尝试在Rserve环境中设置全局变量。我正在构建一个应用程序,其中我已经读取了csv文件并执行了一些分析并返回了结果。因为我无法在每次需要从csv获取数据时设置全局变量。数据文件大小约为1 gb。现在我可以在Rserve环境中设置一个全局变量,但我遇到错误“OutOfMemoryError:Java heap space”。我的代码适用于小csv文件,但不适用于大文件。我使用的是os-centos6.5、netbeans8.1、java1.7、R3.2和glassfish-4.1.1。我在谷歌上搜索来解决这个问题,我尝试了各种解决方案,但仍然得到相同的错误。我喜欢这样做,它适用于小数据集,但不适用于大数据。这是一个示例。RConnection c=新的RConnection();c、 eval(“source(\”/home/jayshree/Desktop/return\u data2.R\”);RList a=c.eval(“x@Simon,你的想法奏效了,我现在没有使用几个连接。我只使用一个连接。我很傻。我被这个愚蠢的错误卡住了。谢谢你,Simon
public class mymainclass {
    public static void main(String[] args) throws RserveException,  REXPMismatchException {
        String file_path1="/home/jayshree/test_data.csv";
        mymainclass mm=new mymainclass();
        String s = mm.myfun_2(file_path1);
        String l3 = mm.myfun_3();

        System.out.println(s);
        System.out.println(l3);
    }

    public static String myfun_2(String file_path) throws RserveException, REXPMismatchException
    { 
        RConnection c = new RConnection();
        c.eval("source(\"/home/jayshree/myrscript.R\")");
        c.assign("file_path",file_path);
        String a  = c.eval("myfun1(file_path)").asString();
        return(a);
    }

    public static String myfun_3() throws RserveException, REXPMismatchException
    { 
        RConnection c = new RConnection();
        c.eval("source(\"/home/jayshree/myrscript.R\")");
        String b = c.eval("myfun2()").asString;

        return(b);
    }
}