我有一個Rscript myrscript.R,它具有下面的代碼。如何在Rscript中聲明一個全局變量並從Java調用它
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調用這個腳本。
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);
}
}
從java運行這個。它拋出了不匹配的錯誤。錯誤是因爲在調用R腳本的第二個函數時發生的。全局變量e $ mydata1的值未被初始化,並且爲空。但它不應該。我在R控制檯中運行腳本文件的代碼。它運行良好。但是,當從java調用時,爲什麼全局變量不起作用。有沒有其他的解決方案。
'myfun2'接受參數'file-path',它不是一個有效的R變量名稱。 –
對不起,這是輸入錯誤 –