2

我无法使用 R.Net 调用我自己的 R 函数;我在一些 R 脚本 myScript.R, ... 中有几个用户定义的函数,我想使用 R.net 调用这些函数

这就是我到目前为止所拥有的

一个 myScript.R 文件包含几个这样的函数

userDefinedFunctionOne <- function(parameter1, parameter2)
{
.
.
.
}

userDefinedFunctionTwo <- function(parameter1, parameter2, ...)
.
.
.

并且使用 R.Net,在我的类的构造函数中,我创建了 REngine 类的实例

private REngine engine;

public MyClass()
{
     this.engine = REngine.GetInstance();
}

然后我获取 myScript.R 文件

this.engine.Evaluate(@"source('C:/RScripts/myScript.R')");

但是当我这样调用我的函数时

var dataframe = this.engine.Evaluate(string.Format("dataframe <- userDefinedFunctionOne(parameter1 = {0}, parameter2 = {1})",
                                                        value1,
                                                        value2)).AsDataFrame();

我收到此错误

错误:找不到函数“userDefinedFunctionOne”

当用户函数像这样定义时,我发现了一些示例

Function data = engine.Evaluate(@"data <- function(a,b){ 
    c = a %*% b;
    return(c);
    }").AsFunction();

但我想避免这种情况,因为正如我所写,我的 R 脚本文件中有几个函数

有没有办法在不将我的 R 函数重写为字符串的情况下做到这一点???

我会感谢任何帮助,谢谢

4

1 回答 1

1

你所描述的很好,应该可以工作(顺便说一句好帖子,谢谢)。我不明白为什么userDefinedFunctionOne找不到,因为它应该已经在全局 R 环境中加载。

我在我使用的一个示例应用程序中添加了一些代码: SourceRCode

从您的帖子派生的代码运行得很好,我可以在调试模式下看到来自 Visual Studio 的预期数据框。如果您有这个示例应用程序的问题,您可以试一试并报告吗?

示例应用程序使用最新的 NuGet 包(编写时为 1.6.5),但看起来您使用的是最新版本的 R.NET 给定方法,我不认为版本是问题的原因。

于 2015-08-27T14:18:37.887 回答