无法使用Rserve将数据写入csv
我能够在Java应用程序中通过Rserve在R脚本中执行远程命令执行和函数调用。但是当我的函数试图使用无法使用Rserve将数据写入csv,r,rserve,R,Rserve,我能够在Java应用程序中通过Rserve在R脚本中执行远程命令执行和函数调用。但是当我的函数试图使用 write.csv(MyData, file = "MyData.csv") 他们没有生成MyData.csv文件,也没有显示错误。当我在R控制台中执行相同的步骤时,它工作正常 Rserve正在我的本地计算机上运行,我正在使用以下连接和执行: RConnection connection = new RConnection(); connection.eval("makecsv()") p
write.csv(MyData, file = "MyData.csv")
他们没有生成MyData.csv文件,也没有显示错误。当我在R控制台中执行相同的步骤时,它工作正常
Rserve正在我的本地计算机上运行,我正在使用以下连接和执行:
RConnection connection = new RConnection();
connection.eval("makecsv()")
p、 我省略了上面的“源代码R脚本”步骤
仅供参考,这是我正在尝试运行的虚拟R脚本:
makecsv <- function(){
x<-rnorm(10)
y<-rnorm(10)
df1<-data.frame(x,y)
write.csv(df1, file = "MyData.csv")
return(df1)
}
makecsv您可能必须使用绝对路径,如下所示:
write.csv(MyData, file = "/var/MyData.csv")
如果您的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
以下是两条建议:
首先尝试通过connection.eval(parse(“makecsv()”)
通过connection.eval(“getwd()”)
您确定检查的目录正确吗?你能从Rserve打印getwd()吗?@Sab:是的,目录是正确的。它看起来很合法,我尝试用异常处理来包装它,但无法生成文件。我并行检查了Rserve,它已经启动并运行,因为我可以通过R控制台进行连接。但感谢您的投入:)令人惊讶的是,这解决了我的问题:D您能告诉我为什么这样做有效,或者为什么我的代码以前不起作用,因为我遵循官方文件的所有内容吗?我很高兴我的建议是有用的。我经常使用Rserve,我想它对工作目录有不同的用法,所以必须使用绝对路径来读写文件。很抱歉,我没有任何官方文件可供分享,只有我的经验。是的,对于R服务来说,这些文件非常有限,很难找到任何细节。谢谢你的意见!工作目录是正确的,解析并没有真正帮助我。不过,感谢您的投入:)