У меня есть файл сценария 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 из строки ресурса С#, а не из файла.
есть идеи как это сделать?
Спасибо заранее!
Хорошо, поэтому, подумав о том, как объединить С#/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))");
Если у вас есть другой способ сделать это, я тоже хочу увидеть ваше решение! Благодарю!