我正在使用R.net并尝试调用用R编写的函数。
这是我在visual studio中的代码
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网络应用程序运行的。它第一次工作,当我刷新几次时,它会中断。
答案 0 :(得分:2)
R.NET处于混合状态这一事实可能是一个促成因素,但如果有的话,这可能不是问题的核心。
我注意到两件事:
第一点暗示了多线程问题的可能性,众所周知,不可重现且显然是随机的。第二个也是如此,但这并不是显而易见的,也是R的一个怪癖。
您是否有理由认为代码中的某些内容是多线程的?这是你自己可能不会明确做的事情。例如,您是从命令行,Windows窗体,Web应用程序运行吗?
这个post on R-devel提供了有关R CStackLimit和多线程之间相互作用的一些信息。
关于stackoverflow的这篇文章Tkinter and thread. out of stack space (infinite loop?)涉及一些tcl / tk的经验以及多个线程访问它时的错误。