1

我有一个 R 脚本文件,我们称它为“Script.R”,我想从 C#(使用 R.Net)将其导入 R。例如,Script.R 中有几个我想从 C#/R.Net 调用的函数。

出于部署目的,我在 Visual Studio 的“属性”中添加了 Script.R 作为“资源”。在运行时,我可以使用“MyProject.Resources.Script”将 Script.R 文件的文本作为 C# 字符串获取(假设项目名为“MyProject”,Script.R 资源名为“脚本”字段。)

现在,我知道我可以使用从 R.Net 调用的 R 的“源”函数,以及 Script.R 的文件路径,例如,

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

...但是,我想要做的(并且似乎无法弄清楚)是如何从 MyProject.Resources.Script C# 字符串中获取(或解析?)Script.R。也就是说,我想从资源 C# 字符串而不是文件中获取我的 Script.R。

知道怎么做吗?

提前谢谢了!

4

1 回答 1

1

好的,所以在思考了如何结合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))");

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

于 2014-08-05T11:25:54.460 回答