2012-09-13 44 views
12

我想使用僅適用於.NET的R中的API。有沒有可以用來從R調用.NET C#代碼的標準方法?如果是這樣,我該怎麼做?從R調用.NET/C#

回答

13

本討論的讀者可能會考慮的另一種選擇是rClr package,我一直在努力研究幾年來從R訪問任意.NET代碼。它是R.NET的兄弟姐妹,相反,這是一種方式從.NET訪問R。

爲了給RCLR包的味道,經典的「Hello World」的樣子:

library(rClr) 
clrLoadAssembly('c:/path/to/myassembly.dll') 
myObj <- clrNew('MyNamespace.MyClass,MyAssemblyName') 
clrCall(myObj, 'SayHelloWorld') 

意見和建議,通過網站的歡迎。

+2

哇 - 下載它並它的工作絕對完美!這個軟件包簡直太棒了,我希望將來能夠使用它。保持良好的工作! – Contango

+0

有沒有人有上面的代碼的簡單的具體例子? – Artiga

+0

庫(rClr) clrLoadAssembly('C:\\ __ \\ TstingRLib \\ ClassLibrary1 \\ bin \\ Release \\ ClassLibrary1.dll') yObj < - clrNew('System.System.Text,System') 找不到類型:System.System.Text,系統 clrNew(「System.System.Text,System」)中的錯誤: 類型:System.ArgumentException 消息:無法確定字符串System.System.Text中的Type,系統' 方法:在___ \ AppData \ Local \ Temp \ Rtmp2D63Nz中的Rclr.ClrFacade.CreateInstance(String typename,Object [] arguments)堆棧跟蹤: System.Object CreateInstance \ R.INSTALL1f3c2a50350 \ rClr \ src \ ClrFacade \ ClrFacade.cs:line 316' – Artiga

3

將.NET dll暴露爲COM dll,然後在R中調用dll中的COM對象似乎是唯一的方法。並有一個它的包:http://cran.r-project.org/web/packages/rcom/rcom.pdf

如果你不能做一個COM DLL,因爲它的第三方DLL,你可以隨時創建一個新的界面,如COM DLL接口,你可以調用實際的DLL DLL。

+1

要獲取系統中ProgID的列表,請參閱http://procbits.com/2010/11/08/get-all-progid-on-system-for-com-automation/ – Contango