如何将通过R.NET生成的图保存到磁盘上的文件中?

时间:2019-04-01 10:49:22

标签: c# r r.net

我正在使用R.NET生成图(使用ggplot),我想将这些图以PNG格式保存在磁盘上。每当我调用engine.Evaluate("ggsave('C:\path\to\file.png', myPlot)")时,程序都会突然退出,退出代码为2,而没有任何内容写入磁盘。发生这种情况时,不会显示任何错误。也无法使用png()pdf()将绘图写入文件。此问题并非特定于ggplot,但是-我也无法存储通过本机plot函数生成的图。

我可以将问题缩小到包含ggsave()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()");  
    }
  }
}

Apparently, this code should work without any issues

运行时

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创建注册表项-我只是使用here中所述的R DLL。

2 个答案:

答案 0 :(得分:0)

结果是,图像文件的路径中不能包含反斜杠。如果要将映像写入磁盘上的文件,则必须使用正斜杠,例如代替

engine.Evaluate("png('D:\\Test.png')");

使用

engine.Evaluate("png('D:/Test.png')");

也许这对其他人还是有帮助的。

答案 1 :(得分:0)

并不是您不能在答案中提到反斜杠。尽管正斜杠也可以解决您的问题,但我认为如果我解释其他解决方案,将来可能会有所帮助。

您必须两次转义反斜杠。

一次使用C#,一次用于R。

这样调用评估

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')" < / strong>。