4

我正在使用 R.NET 库在 C# 中调用 R 函数。我想在 c# 中定义或构造输入并将其传递给 R 命令。我试过这个:

engine.Evaluate("library(mirt)");
engine.Evaluate("x=mirt(Science,1)");
S4Object obj111 = engine.GetSymbol("x").AsS4();
engine.Evaluate("pl=x@Pl");
NumericVector pl_c= engine.GetSymbol("pl").AsNumeric();
int[] resp_c = new int  [] {1,1,1,1};
engine.Evaluate("ff=fscores(x, response.pattern=resp_c)");

在尝试这个时,我遇到了一个错误,上面写着,

未找到“resp_c”。

有什么方法可以将输入从 C# 传递给 R 函数,而无需在双引号中显式地写入输入,这只是 R 脚本。

非常感谢您提前回复。

4

1 回答 1

3

不是 c# 专家,但快速浏览一下文档就会发现,您可以通过以下方式实现您想要的:

int[] resp_c = new int  [] {1,1,1,1};
IntegerVector resp_cR = engine.CreateIntegerVector(resp_c);
engine.SetSymbol("resp_c", resp_cR);
engine.Evaluate("ff=fscores(x, response.pattern=resp_c)");

你需要从你的 c# 数组中创建一个 R 对象,然后给它一个符号。

老实说,我从未用 c# 编程,但我用 Java 和 JRI(java/R 集成)编程,并且知道如何将 Java 对象传递给 R。无法测试,也无法确定它是否会工作,但也许你会发现这在某种程度上很有帮助。

于 2015-05-14T08:21:49.457 回答