使用RdotNET调用R函数时,避免在c#中提及数据类型的方法

时间:2015-10-12 09:43:18

标签: c# r r.net

我使用R.NET在C#中调用R函数。在这样做时我意识到每次调用函数时我都需要指定它的类型。

For Instance:

 engine.Evaluate("x = 3.5:10.5");

            NumericVector a1= engine.GetSymbol("x").AsNumeric();

对于上面的代码,我需要指定a1是一个数字向量。

engine.Evaluate("x = c('a',3,7,'adad', 'xyz')");
            CharacterVector a2 = engine.GetSymbol("x").AsCharacter();

对于这段代码,我需要指定a2是一个字符向量。

有没有办法了解数据的类型?或使用适用于所有数据类型/对象的一般内容?

感谢任何帮助。 提前感谢你。

2 个答案:

答案 0 :(得分:3)

为什么不直接保存对符号的引用

engine.Evaluate("x = 3.5:10.5");
var a1 = engine.GetSymbol("x");

答案 1 :(得分:2)

如前一条评论中所述,您可以使用engine.Evaluate("class(x)").AsCharacter().ToArray()来获取R对象的类。

在R.NET中,父类型SymbolicExpression有一些方法可以动态查询类型,但这并不包括所有情况。有些事情如:

SymbolicExpression blah = engine.GetSymbol("blah");
bool isList = blah.IsList();

但没有像IsCharacter()这样的方法。我注意到将类型检查方法的范围扩展为功能请求。

从广义上讲,R是动态类型的,C#是静态类型的。我理解你要求的是将R动态类型投射到C#中;这(实际上)是不可能的。如果您愿意尝试F#,F# R Provider会提供您正在寻找的一些功能。