在 R.Net 的脚本中调用用户定义的函数

Calling user defined functions inside a script in R.Net

我在使用 R.Net 调用我自己的 R 函数时遇到问题;我在一些 R 脚本中有几个用户定义的函数 myScript.R, ..., 我想使用 R.net

调用这个函数

这就是我目前得到的

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

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

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

和 R.Net,在我的 class 的构造函数中,我创建了一个 REngine class

的实例
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();

我遇到了这个错误

Error: could not find function "userDefinedFunctionOne"

我发现看到了一些这样定义用户函数的例子

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

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

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

如果有任何帮助,我将不胜感激, 谢谢

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

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

从您的 post 运行 派生的代码很好,我可以在调试模式下看到来自 visual studio 的预期数据帧。如果您对此示例应用程序有任何问题,您可以尝试一下并报告吗?

示例应用程序使用最新的 NuGet 包(撰写时为 1.6.5),但是 鉴于这些方法,您似乎正在使用 R.NET 的最新版本,我不认为版本是问题的原因。