从R中调用.NET/C#

14

我想在R中使用一个只能在.NET中使用的API。是否有一种标准方法可以用来从R调用.NET C#代码?如果有,那么该如何做呢?

我想在R中使用一个只能在.NET中使用的API。是否有一种标准方法可以用来从R调用.NET C#代码?如果有,那么该如何做呢?
2个回答

14

这篇讨论的读者们可能考虑另一种选择,即我已经花了几年时间开发的rClr包,可以访问任意的.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
有没有人有以上代码的简单具体示例? - Artiga
library(rClr) clrLoadAssembly('C:\\__\\TstingRLib\\ClassLibrary1\\bin\\Release\\ClassLibrary1.dll') yObj <- clrNew('System.System.Text,System') Type not found: System.System.Text,System Error in clrNew("System.System.Text,System") : Type: System.ArgumentException Message: Could not determine Type from string 'System.System.Text,System' Method: System.Object CreateInstance(System.String, System.Object[]) Stack trace: at Rclr.ClrFacade.CreateInstance(String typename, Object[] arguments) in ___\AppData\Local\Temp\Rtmp2D63Nz\R.INSTALL1f3c2a50350\rClr\src\ClrFacade\ClrFacade.cs:line 316 - Artiga
R > 4.0 的建议? - Salix

3
将.NET dll公开为COM dll,然后从R中调用dll中的COM对象似乎是唯一的方法。而且有一个相应的包:http://cran.r-project.org/web/packages/rcom/rcom.pdf
如果您无法创建COM dll,因为它是第三方dll,您始终可以创建一个类似接口的新的.NET dll,并具有COM接口,这样您就可以调用实际的dll。

1
要获取系统中的 ProgID 列表,请参阅 http://procbits.com/2010/11/08/get-all-progid-on-system-for-com-automation/。 - Contango

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接