R.Net: поиск / анализ файла Script.R, хранящегося в виде текстового файла в Visual Studio (C #)

1

У меня есть файл сценария R, позвольте ему "Script.R", который я хочу передать в R из С# (используя R.Net). Например, Script.R имеет несколько функций, которые я хочу вызвать из С#/R.Net.

Для целей развертывания я добавил Script.R в качестве "Ресурса" в Visual Studio "Свойства". Во время выполнения я могу получить текст файла Script.R как С# String с помощью "MyProject.Resources.Script" (где предполагается, что проект называется "MyProject", а ресурс Script.R указан с поле "Сценарий").

Теперь я знаю, что могу использовать функцию R "source", называемую R.Net, с файлом пути Script.R, например,

rEngine.Evaluate(String.Format("source('{0}')", filePath));

... но то, что я пытаюсь сделать (и, похоже, не могу понять), заключается в том, как исправить (или разобрать?) Script.R из строки MyProject.Resources.Script С#. То есть, я хотел бы указать свой скрипт.R из строки ресурса С#, а не из файла.

есть идеи как это сделать?

Спасибо заранее!

  • 0
    У меня проблемы с поиском из файла. Как выглядит ваш "filePath"?
Теги:
visual-studio
rdotnet

1 ответ

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

Хорошо, поэтому, подумав о том, как объединить С#/R.Net/R, я нашел решение. Здесь разбитое решение (используя гораздо больше переменных, чем нужно, но, надеюсь, предоставляя большую ясность):

String script = MyProject.Resources.Script; 
string[] scriptSplit = script.Split(new string[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries);
SymbolicExpression rscriptSplitSymbolicExpression = rEngine.CreateCharacterVector(scriptSplit);
rEngine.SetSymbol("rscriptSplitSymbolicExpression", rscriptSplitSymbolicExpression);
rEngine.Evaluate("eval(parse(text=rscriptSplitSymbolicExpression))");

Конечно, это можно упростить:

rEngine.SetSymbol("rscriptSplitSymbolicExpression", rEngine.CreateCharacterVector(MyProject.Resources.Script.Split(new string[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries));
rEngine.Evaluate("eval(parse(text=rscriptSplitSymbolicExpression))");

Если у вас есть другой способ сделать это, я тоже хочу увидеть ваше решение! Благодарю!

Ещё вопросы

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