-1

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

例如:

 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 是一个字符向量。

有没有办法知道数据的类型?或使用适用于所有数据类型/对象的通用方法?

任何帮助表示赞赏。提前谢谢你。

4

2 回答 2

3

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

engine.Evaluate("x = 3.5:10.5");
var a1 = engine.GetSymbol("x");
于 2015-10-12T10:11:00.560 回答
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提供了一些您似乎正在寻找的功能。

于 2015-10-12T21:02:21.233 回答