У меня есть все необходимые требования при использовании R.NET с http://rdotnet.codeplex.com/
Мой код работает отлично на R Studio, но не повезло в графическом интерфейсе. Может ли кто-нибудь сообщить мне, что я делаю неправильно, пожалуйста?
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();
Но по какой-то причине "oldset" всегда оценивает NULL. Я уже тестировал это через R-Studio
пожалуйста посоветуй?
Ответ:
var oldset = sliderfunc.Invoke(new SymbolicExpression[] { directory }).AsDataFrame();
измените приведенную выше строку на:
var oldset = sliderfunc.Invoke(new SymbolicExpression[] { directory }).AsNumericMatrix();
Причина неизвестна, хотя скрипт возвращает фрейм данных, но он не может распознать это как фрейм данных, но распознает это как числовую матрицу.
Вы абсолютно уверены, что ваша функция возвращает фрейм данных, а не матрицу? Следующее ведет себя точно так, как ожидалось, и, как вы описали. Я работаю из последнего кода, но эта часть 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);