2015-08-26 2 views
1

У меня возникли проблемы с вызовами собственных R-функций с использованием R.Net; У меня есть несколько пользовательских функций внутри некоторых сценариев R myScript.R, ..., и я хочу, чтобы вызывать эту функцию с помощью R.netВызов пользовательских функций внутри скрипта в R.Net

это то, что у меня до сих пор

один myScript.R файл содержит несколько функций, как этого

userDefinedFunctionOne <- function(parameter1, parameter2) 
{ 
. 
. 
. 
} 

userDefinedFunctionTwo <- function(parameter1, parameter2, ...) 
. 
. 
. 

и с R.Net, в конструкторе моего класса я создаю экземпляр класса REngine

private REngine engine; 

public MyClass() 
{ 
    this.engine = REngine.GetInstance(); 
} 

я подключу myScript.R файл

this.engine.Evaluate(@"source('C:/RScripts/myScript.R')"); 

, но когда я называю свои функции как этот

var dataframe = this.engine.Evaluate(string.Format("dataframe <- userDefinedFunctionOne(parameter1 = {0}, parameter2 = {1})", 
                 value1, 
                 value2)).AsDataFrame(); 

Я получаю эту ошибку

Error: could not find function "userDefinedFunctionOne"

Я нашел видел некоторые примеры, когда пользовательские функции определяется как это

Function data = engine.Evaluate(@"data <- function(a,b){ 
    c = a %*% b; 
    return(c); 
    }").AsFunction(); 

bu t Я хочу этого избежать, потому что, как я писал, у меня есть несколько функций внутри файлов R-скриптов.

есть ли способ сделать это, не переписывая мои R-функции как строки ???

Я бы apreciate помощи, спасибо

ответ

0

То, что вы описываете, просто отлично и должны работать (хороший пост, кстати, спасибо). Я не понимаю, почему userDefinedFunctionOne не найден, так как он должен быть загружен в глобальную среду R.

Я добавил немного коды в одном из примеров приложений я использую: SourceRCode

код, полученный из вашего поста побежал просто отлично, я мог видеть ожидаемый кадр данных от визуальной студии в режиме отладки , Можете ли вы дать ему попробовать и сообщить, есть ли у вас проблема или нет с этим образцом приложения?

Образец приложения использует последний пакет NuGet (1.6.5 от записи), но похоже, что вы используете последнюю версию R.NET с учетом методов, и я не ожидаю, что версия будет вызвана проблемы.

+0

Проблема заключалась в том, что я не вызывал 'REngine.SetEnvironmentVariables();' перед тем, как получить экземпляр Rengine 'this.engine = REngine.GetInstance();' я увидел, что в этом примере добавлена ​​эта строка и она работает сейчас, спасибо – streetwizard

Смежные вопросы