首页 > 解决方案 > 如果多次调用 REngine.CreateNumericVector,则返回“值不在预期范围内”

问题描述

我正在尝试在 C# 程序中使用 RDotNet 创建一个图形。我调用了一个表单,它根据输入创建 C# 双精度列表。然后它尝试将列表相互绘制为 X 和 Y 值。我第一次调用它时它总是有效,但如果我再次调用它,我对 engine.CreateNumericVector 的调用会导致错误“值不在预期范围内”。每次调用表单时都会重新创建表单,并且每次都会创建新列表。即使我使用列表中的相同数据调用它,也会发生这种情况。

尝试使用不同大小的列表调用 CreateNumericVector,但没有绘图,并且没有问题。尝试将列表设置为 IEnumerable 值并使用它,但不起作用。尝试了将 SymbolicExpressions 传递给创建 R 绘图的例程的相同场景,没有任何问题。尝试将列表参数传递给绘图函数而不是使用全局列表,没关系。问题似乎出在 CreateNumericVector 上。

private void PlotR()
{
    using (engine)
    {
      NumericValue a = engine.CreateNumericValue(aList);
      engine.SetSymbol("AValues", a);

      NumericValue b = engine.CreateNumericValue(bList);
      engine.SetSymbol("BValues", b);

      engine.Evaluate("plot(BValues, AValues, psch = 15, cex=1, 
          col=rgb(0,0,1);
    }
}

调出表单,创建双精度列表,并调用此函数一次,它会绘制值。关闭表单,使用不同的信息再次打开它,创建不同的列表,总是停止该行:NumericValue a = engine.CreateNumericValue(aList) 错误“值不在预期范围内。REngine 在早期成功创建程序,在调用任何表单之前,所以引擎一直在运行,没有任何麻烦。这个表单是唯一使用它的表单。

标签: c#r

解决方案


推荐阅读