1

我正在使用 R.net 并尝试调用用 R 编写的函数。

这是我在视觉工作室的代码

var myfnc = _engine.Evaluate("source('.....CalculateCost.R')").AsCharacter();

var _uid = _engine.CreateCharacter(uid);
var arr = _engine.CreateIntegerVector(ids.Length);
var _batchGuid = _engine.CreateCharacter(batchId);

var ss = _engine.Evaluate(myfnc[0]).AsFunction();
ss.Invoke(new SymbolicExpression[] { arr, _uid, _batchGuid });

//_engine has been initialized in the constructor

上面的代码将生成一个图并保存在一个文件夹中。而已。

问题:它在大多数情况下都很好用。但有时它会引发以下错误。

Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") : 
[tcl] out of stack space (infinite loop?).
 at RDotNet.Function.evaluateCall(IntPtr call)
at RDotNet.Function.createCallAndEvaluate(IntPtr argument)
at RDotNet.Function.InvokeOrderedArguments(SymbolicExpression[] args)
at RDotNet.Closure.Invoke(SymbolicExpression[] args)
at SmartPoolApp.Helpers.RStuffGenerator.ExecuteCostCalculation(Int32[] ids,    String uid, String batchId) in k:\Repositories\myprogram\Helpers\RStuffGenerator.cs:line 157

在第 57 行,我有以下代码:

ss.Invoke(new SymbolicExpression[] { arr, _uid, _batchGuid });

我只是不知道如何解决它,它甚至意味着什么!任何帮助将不胜感激。

编辑:

我从一个 asp.net mvc web 应用程序运行它。它第一次工作,当我刷新几次时,它就坏了。

4

1 回答 1

2

R.NET 混合在一起的事实可能是一个促成因素,但这可能不是问题的核心,如果有的话。

我注意到两点:

  • 它大部分时间都有效,但有时无效
  • 与堆栈空间有关(在使用 R 的上下文中)

第一点暗示了多线程问题的可能性,众所周知的不可重现且显然是随机的。第二个也是如此,但这并不明显,并且是 R 的一个怪癖。

您是否有理由认为代码中的某处某处是多线程的?这是您自己可能不会明确执行的操作。例如,您是从命令行、Windows 窗体、Web 应用程序运行它吗?

这篇关于 R-devel 的帖子提供了一些关于 R CStackLimit 和多线程相互作用的信息。

这篇文章Tkinter 和线程。stackoverflow 上的堆栈空间不足(无限循环?)与一些 tcl/tk 东西的经验有关,如果多个线程访问它,则会出现错误。

于 2015-10-21T21:53:11.500 回答