Ошибка исключения переполнения стека в методе 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
Используйте отладчик для пошагового просмотра кода строка за строкой.