Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用RdotNET调用R函数时避免在c#中提及数据类型的方法_C#_R_R.net - Fatal编程技术网

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

使用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

我使用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是一个字符向量

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

感谢您的帮助。
提前谢谢。

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

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”