无法使用 Rserve 将数据写入 csv
Unable to write data to csv using Rserve
我能够在 Java 应用程序中通过 Rserve 在 R 脚本中执行远程命令执行和函数调用。但是当我的函数尝试使用
将数据帧保存在 csv 文件中时
write.csv(MyData, file = "MyData.csv")
他们 MyData.csv 文件没有生成,也没有显示错误。当我在 R 控制台中执行相同的步骤时,它工作正常。
Rserve 运行在我的本地机器上,我正在使用以下连接和执行:
RConnection connection = new RConnection();
connection.eval("makecsv()")
p.s。我省略了上面的 "source the R script" 步骤
仅供参考,这是我正在尝试的虚拟 R 脚本 运行:
makecsv <- function(){
x<-rnorm(10)
y<-rnorm(10)
df1<-data.frame(x,y)
write.csv(df1, file = "MyData.csv")
return(df1)
}
可能你必须使用绝对路径,像这样:
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
.
这里有 2 个建议:
- 首先尝试通过
connection.eval(parse("makecsv()"))
将字符串解析为表达式
- 通过
connection.eval("getwd()")
检查工作目录
我能够在 Java 应用程序中通过 Rserve 在 R 脚本中执行远程命令执行和函数调用。但是当我的函数尝试使用
将数据帧保存在 csv 文件中时write.csv(MyData, file = "MyData.csv")
他们 MyData.csv 文件没有生成,也没有显示错误。当我在 R 控制台中执行相同的步骤时,它工作正常。
Rserve 运行在我的本地机器上,我正在使用以下连接和执行:
RConnection connection = new RConnection();
connection.eval("makecsv()")
p.s。我省略了上面的 "source the R script" 步骤
仅供参考,这是我正在尝试的虚拟 R 脚本 运行:
makecsv <- function(){
x<-rnorm(10)
y<-rnorm(10)
df1<-data.frame(x,y)
write.csv(df1, file = "MyData.csv")
return(df1)
}
可能你必须使用绝对路径,像这样:
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
.
这里有 2 个建议:
- 首先尝试通过
connection.eval(parse("makecsv()"))
将字符串解析为表达式
- 通过
connection.eval("getwd()")
检查工作目录