1

I have all the necessary requirements when using the R.NET from http://rdotnet.codeplex.com/

My code works just fine on R Studio, however no luck on GUI. Can anybody let me know what I am doing wrong please?

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();

But for some reason the 'oldset' always evaluates to NULL. I already tried testing this via R-Studio

please advice?

4

2 回答 2

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);
于 2014-11-15T21:30:39.957 回答
0

回答:

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

将上面的行更改为:

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

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

于 2014-11-10T18:12:52.233 回答