我使用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是一个字符向量。
有没有办法了解数据的类型?或使用适用于所有数据类型/对象的一般内容?
感谢任何帮助。 提前感谢你。
答案 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会提供您正在寻找的一些功能。