2014-05-12 92 views
1

我試圖用R.NET v1.5.12來設置,我將這段代碼作爲一個在創建和初始化對象之前深入我的項目的測試。無法從R.NET獲取REngine實例

string rHome = @"C:\Program Files\R\R-3.0.2"; 
string rPath = Path.Combine(rHome, @"bin\i386"); 

REngine.SetEnvironmentVariables(rPath, rHome); 

REngine engine = REngine.GetInstance(); 

engine.Initialize(); 

Console.WriteLine("So far, so good."); 

engine.Dispose(); 

Console.ReadKey(); 

的代碼產生也不例外,但默默地當它試圖獲得使用REngine.GetInstance()的R實例失敗。什麼都不寫入控制檯,控制檯不會等待按鍵。 Visual Studio告訴我,XX.vshost.exe用代碼2退出但沒有說別的。

有沒有人在這裏有任何見解?我想這不是路徑問題,因爲我明確設置了R路徑。

+0

您可以檢索R.NET並在調試模式下編譯RDotNet項目(及其依賴項RDotNet.NativeLibrary),並根據它測試您的程序?我無法用我認爲可能發生的兩種情況來重現問題。如果您可以縮小應用程序退出的位置,這將會很好。沒有堆棧跟蹤的應用程序退出可能會導致R本地關閉並請求清理,但沒有明確的規定提供診斷信息。 –

+0

我強烈建議您使用[nuget包](http://www.nuget.org/packages/R.NET/1.5.5),因爲它會爲您節省大量安裝和路徑頭痛。 –

+0

nuget包1.5.5被取代;我懷疑恢復到它將解決這個問題,並帶來其他限制。更新的軟件包將在nuget.org上提供;正在進行當前的工作。 –

回答

1

我遇到了同樣的問題。調用REngine.GetInstance()使得整個過程悄無聲息退出編碼2

我調查R.NET和R3.2.2的源代碼,然後發現:

  1. REngine.GetInstance()在R.dll
  2. 調用本機的功能 setup_Rmainloop()
  3. setup_Rmainloop()呼叫exit()時它不能打開在 「%R_HOME%/庫/鹼/ R /基」, 「基極」 的庫文件,以退出代碼2.

我建議你檢查fopen("%R_HOME%/library/base/R/base", "r")(或任何等效的代碼)是否失敗。

+0

此問題是否解決?對我來說,它確實如此,因爲我有關於我的R安裝路徑的一些正確的問題,這些問題通過嘗試打開文件而暴露出來。 – Xlaech