我在加载" dplyr"库时会遇到错误的错误。
engine.Evaluate("library(dplyr)");
上方代码我相同错误
"类型'system.stackoverflowException'的未手动例外' 发生在rdotnet.dll中。
有人可以帮我吗?预先感谢...
错误的屏幕截图
我在加载 dplyr 和其他R库也有类似的问题。事实证明,IIS和II Express在32位上的堆栈大小为256K,在64位OS上的堆栈大小为512 K。您可以通过以下方式解决这个问题:
1(创建具有较大堆栈大小的线程并在其内部执行R.NET命令。例如:
Thread t = new Thread(MyMethodToDoRWork, 2500000 /*thread stack size of 2.5MB*/);
2(通过Editbin工具(随附Visual Studio(更改IIS或II Express进程的默认堆栈大小。请参阅此处的示例。我不建议这样做,但是您将修改实际的IIS/IIS Express二进制文件。
我通过将所有R代码添加到新线程中解决了崩溃问题。它运行完美。在调试模式下,我什至可以看到正确评估了R代码!下面的代码(它在VB中,但易于掩盖到C#(。另外,我还提供了一些可能会有所帮助的上下文。
捕获量是,现在我们在另一个线程中,我无法访问UI线程。似乎有一种很好的方法可以使用UI的Invoke方法在Win表单中完成此操作,但是WebControls似乎没有此方法。希望这对一些有帮助。
Public Class SPF_R
Inherits System.Web.UI.Page
Dim t As System.Threading.Thread
...
Private Sub RunRStuff()
Dim RCode As String = ""
Dim engine As REngine = REngine.GetInstance(Nothing, True, Nothing)
Dim myPath As String = ViewState("Folder") & ViewState("File")
engine.Initialize()
engine.Evaluate("library(MASS)") : RCode &= "library(MASS)" & vbCrLf
engine.Evaluate("library(ggplot2)") : RCode &= "library(ggplot)" & vbCrLf
engine.Evaluate("library(broom)") : RCode &= "library(broom)" & vbCrLf
...
End Sub
Private Function DevelopSPF() As Boolean
cmdSPF.Enabled = False
t = New System.Threading.Thread(AddressOf RunRStuff, 2500000)
t.Start()
cmdSPF.Enabled = True
Return True
End Function
...