在我当前的项目中,我使用的是 C# 和 RDotNet (1.6.5)。我正在计算一些统计数据,例如卡方(使用框架)、相关性和回归(绘图)。我想在我的应用程序中加入一些 R 图。我将绘图输出放入磁盘上的 PNG 文件中,然后我将其拾取并通过 std 读取它。IO。一切看起来都很好,但是有时 - 我无法确切地说出什么时候 - RDotNet 崩溃说一些关于访问坏内存的事情。
它看起来像这样:
或者像这样:
最常见的消息是:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at RDotNet.Function.evaluateCall(IntPtr call)
at RDotNet.Function.createCallAndEvaluate(IntPtr argument)
at RDotNet.Function.InvokeNamedFast(Tuple`2[] args)
at RDotNet.REngineExtension.CreateDataFrame(REngine engine, IEnumerable[] columns, String[] columnNames, String[] rowNames, Boolean checkRows, Boolean checkNames, Boolean stringsAsFactors)
请注意,CreateDataFrame 可能不是唯一出现错误的地方。一旦它出现在这里,一次是在调用 lm 函数时,一次是在评估一些不同的公式时。
当前的测试场景是(简单地说):计算 A、B、A、B、A,失败。我想说它在做一些已经正确评估的事情时崩溃。
有人可以提供一些解决方法吗?最糟糕的是 RDotNet 是一个单例。不可能简单地捕获错误,处理 REngine 并创建新的。