我的代码在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
进行测试了请咨询?
答案 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();
原因未知,虽然脚本正在返回一个数据框,但它无法将其识别为数据框,但将其识别为数字矩阵。