我能够通过我的Java应用程序中的Rserve在R脚本中执行远程命令执行和函数调用。但是当我的函数试图使用
在csv文件中保存数据帧时write.csv(MyData, file = "MyData.csv")
他们没有生成MyData.csv文件,也没有显示错误。当我在R控制台中执行相同的步骤时,它工作正常。
Rserve正在我的本地计算机上运行,我正在使用以下内容来连接和执行:
RConnection connection = new RConnection();
connection.eval("makecsv()")
P.S。我省略了上面的“源R脚本”步骤
仅供参考,这是我正在尝试运行的Dummy R脚本:
makecsv <- function(){
x<-rnorm(10)
y<-rnorm(10)
df1<-data.frame(x,y)
write.csv(df1, file = "MyData.csv")
return(df1)
}
答案 0 :(得分:1)
可能你必须使用绝对路径,如下所示:
write.csv(MyData, file = "/var/MyData.csv")
答案 1 :(得分:0)
如果你的Rserve
已经死亡,就会发生这种情况。通过适当的错误处理包装try-catch可以帮助调试。
此版本适用于我:
import org.rosuda.REngine.*;
import org.rosuda.REngine.Rserve.*;
public class Main {
public static void main(String[] args) {
try {
RConnection c = new RConnection();
org.rosuda.REngine.REXP getwd = c.eval("getwd()");
System.out.println(getwd.asString());
c.eval("source(\"main.R\")");
c.eval("makecsv()");
c.close();
} catch (REngineException | REXPMismatchException e) {
e.printStackTrace();
}
}
}
输出结果为:
C:/Users/moon/Documents
Process finished with exit code 0
在Documents
文件夹中,我有MyData.csv
。
答案 2 :(得分:0)
以下是2条建议:
connection.eval(parse("makecsv()"))
connection.eval("getwd()")