我正在使用 R.NET 生成图(使用ggplot),我想将这些图以 PNG 格式保存在磁盘上。每当我调用engine.Evaluate("ggsave('C:\path\to\file.png', myPlot)")程序突然中止并退出代码 2 时,没有任何内容写入磁盘;发生这种情况时不会显示错误。png()也不可能使用或将绘图写入文件pdf()。但是,此问题并非特定于ggplot,我也无法存储通过本机plot函数生成的图。我可以将问题缩小到包含ggsave()or png()/的pdf()行:执行此行时,程序中止。因为我实际上可以看到由ggplot()和生成plot()的绘图,所以绘图本身似乎不是问题所在。您应该能够使用以下 C# 代码重新创建我所描述的内容:using RDotNet;namespace Test { class Program { static void Main(string[] args) { REngine.SetEnvironmentVariables(); REngine engine = REngine.GetInstance(); engine.Evaluate("png('D:\\Test.png')"); engine.Evaluate("plot(rnorm(1000))"); engine.Evaluate("dev.off()"); } }}显然,这段代码应该没有任何问题。跑步时png('D:\\Test.png')plot(rnorm(1000))dev.off()在 R 中,生成了一个图并成功保存到 Test.png 中。我正在使用 .NET Framework 4.6.1、R.NET 1.7.0 和 R 3.4.2。我的计算机上没有安装 R,也没有为 R 创建注册表项 - 我只是按照此处所述使用 R DLL 。
2 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
这并不是说你不能像你在回答中提到的那样使用反斜杠。尽管正斜杠也可以解决您的问题,但我认为如果我解释其他解决方案,将来可能会有所帮助。
您必须两次转义反斜杠。
一次用于 C#,一次用于 R。
像这样调用 Evaluate
engine.Evaluate("png('D:\\Test.png')");
将使用字符串调用R
引擎:"png('D:\\Test.png')"
,如果您评估它只是:png('D:\Test.png')。如果你在 R 中输入它,你也会得到一个错误。
如果你想运行 R 命令png('D:\\Test.png')
,你必须转义那个字符串,在转义后它有两个反斜杠变成:"png('D:\\\\Test.png')"
。
12345678_0001
TA贡献1802条经验 获得超5个赞
事实证明,图像文件的路径中不能有反斜杠。如果你想将图像写入磁盘上的文件,你必须使用正斜杠,例如而不是
engine.Evaluate("png('D:\\Test.png')");
利用
engine.Evaluate("png('D:/Test.png')");
也许这对其他人仍然有帮助。
- 2 回答
- 0 关注
- 76 浏览
添加回答
举报
0/150
提交
取消