0

我需要一些帮助来解决一个简单的问题。我正在尝试使用简单的 .Net /C# 控制台应用程序访问 R。

我已经在使用 Ubuntu 14.04 LTS 作为操作系统的虚拟服务器上安装了程序R。我也安装了 Rserve 包。使用 Rserve 和一个名为 RserveCLI 的客户端库,源代码. 我现在可以连接到在虚拟服务器上运行的实例或 R。

现在问题来了,我可以建立连接,但是当我尝试在我自己的解决方案中执行源代码中使用的示例时。我收到以下错误:

“RserveCLI2.RserveException:无法解码 Sexp,因为无法识别类型:48”

            //Setting up the connection and sending information trhough connection to                 be processed
            using ( var s = new RConnection( new System.Net.IPAddress( new byte[] { 192 , 168 , 201 , 101 } ) , port: 6311 , user: NULL , password: NULL ) )
            {
                    // Generate some example data
                    var x = Enumerable.Range( 1 , 20 ).ToArray();
                    var y = ( from a in x select ( 0.5 * a * a ) + 2 ).ToArray();

                    // Build an R data frame
                    var d = Sexp.MakeDataFrame();
                    d[ "x" ] = Sexp.Make( x );
                    d[ "y" ] = Sexp.Make( y );
                    s[ "d" ] = d;

                    // Run a linear regression, obtain the summary, and print the result
                    var linearModelSummary = s[ "summary(lm(y ~ x, d))" ];
                    Console.WriteLine( linearModelSummary.Count );
            }

错误来自它试图处理: var linearModelSummary = s[ "summary(lm(y ~ x, d))" ];

问题在于变量 d。当我查看当前实例的服务时,我已使用 Rserve 打开。它说“错误:找不到对象'd'”

使用的工具和软件:

Visual Studio 2013,.Net Framework 4.5,R,Rserve 版本 = 1.7-3,RServeCLI,Virtual Box 版本 = 4.3.10,笔记本电脑上的操作系统 = Win 7 64 位,虚拟服务器上的操作系统 = Ubuntu Server LTS 14.04

任何建议都会有所帮助,因为我不确定我做错了什么。如果您需要更多信息,请询问我会尽力为您获取。

谢谢

4

2 回答 2

2

不要尝试以这种方式使用 RServeCLI,你永远不会让它可靠地工作。相反,将所有代码放入 R 中的一个函数中,分别对其进行测试,并且只在 R 和 c# 之间传递值和数据帧。

在您的情况下,问题出在这summary条线上,因为无法使用可用工具编组此结构。将结果转移到一个简单的列表中,或者更好地作为开始,转移到原子变量。

于 2014-04-28T13:22:54.827 回答
0

感谢迪特的建议。尝试使用内置函数 getwd(),并执行基本的算术运算。到目前为止一切正常。干杯

于 2014-04-29T09:32:30.037 回答