当我在R中使用statConnector尝试这个时,R库没有加载

时间:2013-04-01 13:42:23

标签: r

当我通过statconnector连接C#和R时,我可以访问R中stat库的基本功能。但是如果我加载一个库(),我就无法调用它的任何功能。

我正在尝试的代码是:

rConn.SetSymbol("n1", 20);
rConn.Evaluate("library(dtw)");
rConn.Evaluate("x1<-rnorm(n1)");
rConn.Evaluate("x2<-rnorm(n1)");
rConn.Evaluate("Score<-dtw(x1,x2,keep.internals=TRUE)");

我得到的错误是当我运行最后一行时,即rConn.Evaluate("Score<-dtw(x1,x2,keep.internals=TRUE)");

我得到的错误是 -

There is no connection for this connection ID (Exception from HRESULT: 0x80040004 (OLE_E_NOCONNECTION))

2 个答案:

答案 0 :(得分:0)

您会发现,通过StatConnector调用的某些函数必须使用.EvaluateNoReturn而不是.Evaluate。如果你认识到如果你通过以下方式检查“得分”(在R中),那么这是有道理的。

class(Score)
[1] "dtw"

您会看到“分数”包含一个dtw对象。无论何时使用.Evaluate,都会隐式调用具有返回值的函数。但是,C#不知道如何处理dtw对象,所以你得到一个时髦的错误信息,让你去嗯。尝试相当于void调用:

rConn.EvaluateNoReturn("Score<-dtw(x1,x2,keep.internals=TRUE)");

你应该没有错误执行dtw。要将返回值返回到C#,而在R中,请查看名称(分数)以查看哪些变量可用,然后是

class(Score$normalizedDistance)
"numeric"

了解如何为C#转换值,如:

double myDist = (double)rConn.Evaluate("Score$normalizedDistance");

答案 1 :(得分:0)

其他信息我发现在调用10个并发的statconnector实例时收到了类似的错误。

返回值时的.Evaluate函数在10%的计算失败时会出现以下错误

There is no connection for this connection ID (Exception from HRESULT: 0x80040004 (OLE_E_NOCONNECTION))   
   at StatConnectorCommonLib.IStatConnector.Evaluate(String bstrExpression)

我发现工作的修复方法是将结果存储在R中的变量中,并使用.EvaluateNoReturn和.GetSymbol返回结果。

StatConnector rConn = new StatConnector();

rConn.Init("R");
rConn.SetSymbol("n1", 20);
rConn.Evaluate ("x1<-rnorm(n1)");
var o = rConn.GetSymbol ("x1");

foreach (double d in o)
    Console.WriteLine(d);

rConn.Close();

查看以下文章,了解我的来源和示例, http://www.billbak.com/2010/11/accessing-r-from-clessons-learned/