Girish Deshmukh Ответов: 0

Ошибка исключения переполнения стека в методе R script для последующего запроса.


Когда я вызываю метод R script из Web API, он работает для первого запроса и возвращает результат, но для последующего запроса получает исключение переполнения стека.
Тот же код работает и на другой системе, пробовал презирать все объекты в R.

Пожалуйста, помогите мне разобраться в этом вопросе.

С помощью
R 3.4.2
Версия.

Что я уже пробовал:

WebAPI Method calling R Script:
<pre>Public HttpResponseMessage CallTestMethod()
{
// SetupPath(); setting Rpackage and ODBC package paths in environment no issue with this method.
REngine engine;
engine = REngine.GetInstance();
//Mentioned R Script file path
var val = engine.Evaluate("source('C:/Folder/RProject1/Script.R')");
//Call FetchDatawithoutParam () and get data frame values in dsResult .
var dsResult = engine.Evaluate(@"TempDataResult <- FetchDatawithoutParam ()").AsDataFrame();
}


Функция R Script, как показано ниже:
FetchDatawithoutParam <- function() {

    dbConnection <- odbcDriverConnect('driver={SQL Server};server=.;database=DBName;trusted_connection=true')
    DataResult <- sqlQuery(dbConnection, "SELECT * FROM TableName;")
   odbcClose(dbConnection)
 return(DataResult );
}

Jochen Arndt

Я не знаю, Может ли это быть причиной вашей проблемы, но ...
odbcClose(dbConnection)
вызов никогда не выполняется, потому что вы возвращаетесь из функции в предыдущей строке.

[no name]

измененный код все еще проблема сохраняется.

Jochen Arndt

Поэтому я пишу это как комментарий, а не как решение.

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

[no name]

Он не работает даже после того, как я выбрал верхние 2 строки из таблицы.
Также попробовал получить результат из хранимой процедуры с подключением ODBC, но безуспешно.

Jochen Arndt

Тогда это, скорее всего, рекурсивный вызов (функция, вызывающая саму себя), как упоминалось в комментарии F-ES Sitecore.

[no name]

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

Jochen Arndt

Я не знаю. Вы уверены, что это происходит в сценарии R, а не где-то еще?

[no name]

Да, ошибка произошла в нижней строке при повторном выполнении.
var dsResult = двигатель.Оценить(@"TempDataResult <- FetchDatawithoutParam ()").AsDataFrame();

F-ES Sitecore

Ошибки переполнения стека почти всегда возникают, когда ваш код попадает в бесконечный цикл, обычно это функция, которая вызывает себя повторно. Я действительно не вижу ничего немедленного в вашем коде, что сделает это, вам нужно будет провести больше исследований.

[no name]

Есть ли у вас какие-либо идеи, которые могут помочь мне идентифицировать рекурсию в моем вышеупомянутом коде?

F-ES Sitecore

Используйте отладчик для пошагового просмотра кода строка за строкой.

0 Ответов