Функция вызова R.NET не работает

1

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

пожалуйста посоветуй?

  • 0
    Вы пробовали минимальный рабочий пример, приведенный в документе? Это работает нормально?
  • 0
    да. Минимальный код работает нормально, даже отладка до последней последней строки работает нормально. Вызывать метод как-то не работает
Показать ещё 3 комментария
Теги:
rdotnet

2 ответа

0
Лучший ответ

Ответ:

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

измените приведенную выше строку на:

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

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

  • 0
    Я посмотрю на настройку модульного теста, чтобы воспроизвести это; 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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню