使用RdotNET调用R函数时避免在c#中提及数据类型的方法
我使用R.NET调用C#中的R函数。在这样做时,我意识到每次调用函数时,我都需要指定它的类型 例如:使用RdotNET调用R函数时避免在c#中提及数据类型的方法,c#,r,r.net,C#,R,R.net,我使用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')"); CharacterVecto
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是一个字符向量
有没有办法知道数据的类型?或者使用适用于所有数据类型/对象的通用工具
感谢您的帮助。
提前谢谢。为什么不保存对符号的引用
engine.Evaluate("x = 3.5:10.5");
var a1 = engine.GetSymbol("x");
如前一条注释所述,您可以使用
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#的话,可以使用类(a2)来查找数据类型,它提供了一些您似乎正在寻找的功能。您也可以使用is.character(a2)检查它是否符合要求谢谢您的回复@Heuer,但它不起作用我甚至不想使用
CharacterVector a2=engine.GetSymbol(“x”).AsCharacter()代码>这行。我已经提到了数据类型。我只需要使用一些东西来告诉我engine.Evaluate中使用的字符串的数据类型(“x=c('a',3,7,'adad',xyz')
基本上“x”的类型是什么?>类(c('a',3,7,'adad',xyz'))
[1]“字符”
在R中对我有效。也许可以尝试将其拆分<代码>x不在R中,我的朋友。我需要用C#来做。也许这个主题会对你们有所帮助?非常感谢你们的回复<代码>引擎。评估(“x=c('a',3,7,'adad','xyz');CharacterVector a2=engine.GetSymbol(“x”).AsCharacter();字符串[]b2=a2.ToArray();MessageBox.Show(“(”+string.Join(“,”,b2)+”)代码>我想在消息框中显示输出。使用'var'时,我无法将a1转换为数组,因此无法在消息框中显示。此外,我还尝试在消息框引擎中直接使用a1。Evaluate(“x=list(a=c(3.5:10.5),b='aaa');var a1=发动机。GetSymbol(“x”);MessageBox.Show(“(”+string.Join(“,”,a1)+”)代码>但消息框显示“RDotNet.SymbolicExpression”