2014-11-07 2 views
1

У меня есть все необходимые требования, когда не используя 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(); 

Но по какой-то причине «oldset» всегда оценивает значение NULL. Я уже пробовал проверить это через R-Studio

советую?

+0

Вы пробовали минимальный рабочий пример, приведенный в документе? Это нормально работает? – tonytonov

+0

есть. Минимальный код работает нормально, даже отлаживая его до второй, второй линии отлично работает. Метод Invoke как-то не работает – adic26

+0

Мой опыт работы с R.NET очень ограничен, но я могу посоветовать попробовать пример в разделе «Вызов R-функций», который, похоже, «Invoke». – tonytonov

ответ

0

Ответ:

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

изменить выше линии:

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

Причина неизвестна, хотя сценарий возвращает кадр данных, но он не в состоянии признать это как кадр данных, но признает это как числовую матрицу.

+0

Я рассмотрю создание единичного теста, чтобы воспроизвести это; https://rdotnet.codeplex.com/workitem/149 –

+0

Я действительно не думаю, что вы показали, что ваш код возвращает DataFrame, а не цифровую матрицу. Этот ответ может ввести людей в заблуждение. –

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