如何使用RDotNet从VS 2017中的C#项目中访问R项目(RTVS)?

时间:2018-07-19 14:08:56

标签: c# r r.net

简而言之,我想为R项目制作一个C#前端。

有点费力:我想使用RDotNet在我的C#代码中使用在R项目(RTVS)中定义的函数,但是在Google中进行大量搜索没有产生任何结果(顺便说一句,似乎问题不大)问,所以我知道我这里可能有一个“您没有看到明显的问题” ...但是,如果是这样,我几个小时都没看到明显的问题!)。

更具体地说:

  • 我有一个名为RLab的R项目
  • 在相同的解决方案中,我有一个名为RFrontEnd的C#项目
  • 在RFrontEnd中,我有使用RDotNet执行R代码的C#方法
  • 在RLab中,我有一个名为Script.R的R文件,其中包含要在RFrontEnd中使用的R代码。
  • 我想在RFrontEnd中使用类似rEngine.Evaluate("source('Script.R')");的方式来访问我在Script.R中编写的代码。

几点:

  • 我不能简单地在C#项目中引用R项目
  • 我可以通过指向R解决方案中的文件来运行项目,如rEngine.Evaluate("source('C:\<Project Address Here>\Script.R')");所示,但这使我的项目依赖于R文件在文件系统中的特定位置。我知道我可以将此位置设置为可以在配置文件中放置的参数,但是必须有一个更优雅的内置解决方案...对吧?
  • 在RInteractive窗口中,我可以简单地使用source('Script.R')并且我的函数可以正常加载

版本规范:

  • RDotNet版本是1.7.0
  • Microsoft R Open版本为3.4.4
  • 用于Visual Studio的R Tools版本是1.3
  • Visual Studio版本是Community 2017

有人可以帮我吗?

谢谢和欢呼!

1 个答案:

答案 0 :(得分:1)

我只是可以将文件链接到项目,所以我可以将指向.R文件的链接放在C#项目中,并将它们复制到项目输出的文件夹中。

这是通过在按住Alt键的同时从R项目中拖动.R文件并将其拖放到我的C#项目中的某个位置(最好是在正确命名的项目文件夹中)之后,再转到新链接的.R文件的属性和将其设置为复制到项目的输出中(这是绝对必要的,因为链接不是真实文件,并且在构建项目时不会在预期的文件系统文件夹中,除非将文件标记为在构建时复制)

这不是我所期望的优雅解决方案,但是即使我必须将项目部署到其他位置,它也可以将.R文件保存到已知的固定位置,因此我可以执行类似rEngine.Evaluate("source('R Scripts/Script.R')");的操作并在我的C#代码中将我的函数正确设置为在R环境中运行(通过RDotNet),同时仍然能够在R项目中正确地对其进行编辑,并在其中找到所有语言支持。

不过,如果有人认为有更好的解决方案,请带上它!