2013-08-20 121 views
0

我正在尋找使用R.NET來執行現有的R腳本,但沒有成功。這實際上可能嗎?我已經成功地運行了示例代碼,所以我的基本設置沒問題。通過R.NET執行本地R腳本

我的代碼如下所示:

static void RTest() 
    { 
    var envPath = Environment.GetEnvironmentVariable("PATH"); 
    var rBinPath = System.Environment.Is64BitProcess ? @"C:\Program Files\R\R-3.0.1\bin\x64" : @"C:\Program Files\R\R-3.0.1\bin\i386"; 
    Environment.SetEnvironmentVariable("PATH", envPath + Path.PathSeparator + rBinPath); 

    using(var engine = REngine.CreateInstance("RDotNet")) 
    { 
     engine.Initialize(); 

     using(var fs = File.OpenRead(@"C:\R-scripts\r-test.R")) 
     { 
      engine.Evaluate(fs); 
     } 
    } 
    } 

我在測試一個控制檯應用程序快到(最終我想擁有它的web應用程序運行服務器端)。

r-test.R腳本在RStudio中運行時工作,所以這裏沒有問題,並且應該導致將csv文件寫入磁盤。我看到一些'正在加載所需的包'消息被輸出到控制檯,所以有些東西正在工作,但是生成的csv文件沒有出現。

回答

1

正如對this post in the R.NET discussions的迴應所示,您可以使用engine.Evaluate(@"source('c:/path/to/r-test.R')")。雖然很多取決於你的腳本的內容當然,它應該工作。這就是說你的代碼看起來應該可以工作,儘管我還沒有嘗試過你的方法。

您的腳本中的某些特定R語句中的R.NET可能會窒息。如果你有Visual Studio,如果你使用帶有調試符號的源代碼編譯R.NET,你應該可以附加到這個過程。如果你有Visual Studio,這是最簡單的選擇; MonoDevelop/Xamarin工作室也是一種選擇,儘管涉及更多。這應該可以幫助您識別麻煩的線路。

希望這有助於

+0

我沒有看到回覆到後(這也是我的)。這對我沒有用。雖然我在用戶文件夾中有我的R腳本,但最初我遇到了'AccessViolationException'。所以我把R腳本移到了一般位置。但是,然後我得到'文件錯誤...無法打開連接'的錯誤。這樣做似乎並不那麼直截了當,我想我必須考慮一種不同的方法。 –

+0

對於不同的方法檢查:[與啓動過程運行R腳本](http://stackoverflow.com/questions/18224439/run-r-script-with-start-process-in-net)這與我合作。 – ruedi