为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
翻过高山走不出你 2022-11-21 22:07:31

我正在使用 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贡献1512条经验 获得超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')"


查看完整回答
反对 回复 2022-11-21
?
12345678_0001

TA贡献1509条经验 获得超5个赞

事实证明,图像文件的路径中不能有反斜杠。如果你想将图像写入磁盘上的文件,你必须使用正斜杠,例如而不是

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

利用

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

也许这对其他人仍然有帮助。


查看完整回答
反对 回复 2022-11-21
  • 2 回答
  • 0 关注
  • 11 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信