我试图将数据从SQL传递到C#,然后传递到R服务器以进行数据分析,然后再传递回我的Web应用程序;但是,我使用的COM接口不允许在C#和R之间传递复杂的数据类型(无数据表).我通过使用以下代码使它过去可以工作:
int count = dataTable.Rows.Count;
object[] y = new object[count];
object[] x = new object[count];
//R does not accept DataTables, so here we extract the data from
//the table and pass it into 2 double arrays.
for (int i = 0; i < count; i++)
{
y[i] = Convert.ToDouble(dataTable.Rows[i][0]);
x[i] = Convert.ToDouble(dataTable.Rows[i][1]);
}
//Instantiate R connection
StatConnector r = new STATCONNECTORSRVLib.StatConnectorClass();
r.Init("R");
r.SetSymbol("y", y); //Passes column y into R
r.SetSymbol("x", x); //Passes column x into R
现在出现了我的问题,因为我不再局限于双打,SQL数据库中出现的任何事情都是公平的游戏(int,varchar等…),而且我不再仅调用两列数据(它可以用户指定的数量).
如何将动态大小和动态数据类型的数据表转换为可以安全传递到rcom的数组?
解决方法:
在Rockford Lhotka(http://search.barnesandnoble.com/Professional-Visual-Basic-60-Business-Objects/Rockford-Lhotka/e/9781861001078)撰写的《 Professional Visual Basic 6.0业务对象》中,他做出了各种声明,即跨应用程序边界的COM接口之间最有效的数据传输结构是String.我不知道这是否成立,但我接受他的资格.因此,我相信Biff MaGriff的建议将是对您的问题的一个很好的简单实现.