. net:查找/解析脚本.R文件作为文本文件存储在Visual Studio (c#)属性资源中

本文关键字:文件 Studio Visual 资源 属性 存储 查找 脚本 net 文本 | 更新日期: 2023-09-27 18:16:18

我有一个R脚本文件,我们称它为" script "。R,"我想从c#(使用rnet)中导入R。例如,脚本。R中有几个函数,我想从c#/rnet中调用。

出于部署目的,我添加了Script。R作为Visual Studio"属性"中的"资源"。在运行时,我可以得到脚本的文本。使用"MyProject.Resources"将R文件转换为c#字符串。脚本"(这里假设项目名为"MyProject",脚本为"MyProject")。R资源以"Script"字段命名)

现在,我知道我可以使用R的"源"函数,从rnet调用,与脚本的文件路径。R,例如,

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

…但是,我想做的(似乎不能弄清楚)是如何源(或解析?)脚本。R从MyProject.Resources.Script c#字符串。也就是说,我想引用我的脚本。

你知道怎么做吗?

提前感谢!

. net:查找/解析脚本.R文件作为文本文件存储在Visual Studio (c#)属性资源中

好了,那么在思考了如何结合c#/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))");

如果你有不同的方法,我也想看看你的解决方案!谢谢!