R.NET调用函数不起作用

时间:2014-11-07 14:45:35

标签: c# r r.net

http://rdotnet.codeplex.com/

使用R.NET时,我有所有必要的要求

我的代码在R Studio上工作正常,但在GUI上没有运气。谁能让我知道我做错了什么?

REngine.SetEnvironmentVariables(@"C:\Program Files\R\R-3.1.1\bin\i386", @"C:\Program Files\R\R-3.1.1");

engine = REngine.GetInstance();

engine.Evaluate(@"source('C:/Users/achugh/Documents/Graphs/characterization.r')");
            engine.Evaluate(@"source('C:/Users/achugh/Documents/Graphs/sliderDataToComputer.r')");

var sliderfunc = engine.Evaluate("sliderdata_yprofile").AsFunction();
var directory = engine.CreateCharacterVector(new[] { "C:/Users/achugh/Documents/Graphs/data" });
var oldset = sliderfunc.Invoke(new SymbolicExpression[] { directory }).AsDataFrame();

但出于某种原因,“老人”'始终计算为NULL。我已经尝试通过R-Studio

进行测试了

请咨询?

2 个答案:

答案 0 :(得分:2)

您是否绝对确定您的函数返回数据框而不是矩阵?以下内容与预期完全一致,如您所述。我正在使用最新的代码,但R.NET的这部分与最新的1.5.16相同。如果确实正确的话,请将这篇文章标记为答案,以免使读者对R数据强制的行为感到困惑。

var funcDef = @"function(lyrics) {return(data.frame(a=1:4, b=5:8))}";
var f = engine.Evaluate(funcDef).AsFunction();
var x = f.Invoke(engine.CreateCharacter("Wo willst du hin?"));
Assert.True(x.IsDataFrame());
Assert.True(x.IsList());
var df = x.AsDataFrame();
Assert.NotNull(df);

funcDef = @"function() {return(as.matrix(data.frame(a=1:4, b=5:8)))}";
f = engine.Evaluate(funcDef).AsFunction();
x = f.Invoke();
Assert.False(x.IsDataFrame());
Assert.False(x.IsList());
df = x.AsDataFrame();
Assert.Null(df);
var nm = x.AsNumericMatrix();
Assert.NotNull(nm);

答案 1 :(得分:0)

答案:

var oldset = sliderfunc.Invoke(new SymbolicExpression[] { directory }).AsDataFrame();

将上述行更改为:

var oldset = sliderfunc.Invoke(new SymbolicExpression[] { directory }).AsNumericMatrix();

原因未知,虽然脚本正在返回一个数据框,但它无法将其识别为数据框,但将其识别为数字矩阵。