如何在VB.NET中将DataFrame转换为DataSet?

时间:2011-08-09 08:52:28

标签: vb.net r

我正在使用R.Net。因为我使用R.Net完成了一些数据库连接,因为我得到了DataFrame格式的结果,我需要将其转换为DataSet

这是我的代码:

    REngine.SetDllDirectory("@C:\Program Files\R\R-2.12.0\bin\i386")
    engine = REngine.CreateInstance("RDotNet")
    engine.EagerEvaluate("library(RODBC);")
    engine.EagerEvaluate("con <- odbcConnect(dsn='rdsn', uid = 'sa', pwd = 'surya');")


    cmdStr = SELECT DISTINCT Investment.InvestmentTypeCode,InvestmentTypeDescription,     SortID  FROM Investment,InvestmentTypeDef WHERE(Investment.InvestmentTypeCode = InvestmentTypeDef.InvestmentTypeCode) ORDER BY SortID

   engine.EagerEvaluate("frm <- sqlQuery(con, '" + cmdStr + "');")

   engine.GetSymbol("frm").AsDataFrame()

如果有人知道请帮助我......

2 个答案:

答案 0 :(得分:1)

R.Net或.NET Framework中没有可以执行此操作的内置功能。但您可以通过编程方式创建和填充DataSet。因此,您必须编写自己的转换代码。

请参阅: Creating A DataSet Programmatically

答案 1 :(得分:1)

我最近不得不将RDataFrame转换为C#中的标准DataTable - 我假设所有列都包含双打:

public static DataTable RDataFrameToDataSet(DataFrame resultsMatrix) {

        var dt = new DataTable();
        var columns = new DataColumn[resultsMatrix.ColumnCount];

        for (int i = 0; i < resultsMatrix.ColumnCount; i++) {
            columns[i] = new DataColumn(resultsMatrix.ColumnNames[i], typeof(double));
        }

        dt.Columns.AddRange(columns);

        for (int y = 0; y < resultsMatrix.RowCount; y++) {
            var dr = dt.NewRow();
            for (int x = 0; x < resultsMatrix.ColumnCount; x++) {
                try {
                    dr[x] = resultsMatrix[y, x];
                }
                catch (Exception ex) {
                    Console.WriteLine(ex.Message);
                }
            }
            dt.Rows.Add(dr);
        }

        return dt;
    }