如何使用 R.net 将 C# 中的数据 table 转换为 R 中的 data.fame
How can I convert a data table in C# to data.fame in R using R.net
我需要将定义如下的数据 table 转换为 R 中的数据框。
DataTable dtb = new DataTable();
dtb.Columns.Add("Column1", Type.GetType("System.String"));
dtb.Columns.Add("Column2", Type.GetType("System.String"));
DataRow dtr1 = dtb.NewRow();
dtr1[0] = "abc";
dtr1[1] = "cdf";
dtb.Rows.Add(dtr1);
DataRow dtr2 = dtb.NewRow();
dtr2[0] = "asdasd";
dtr2[1] = "cdasdasf";
dtb.Rows.Add(dtr2);
有什么方法可以将上面的数据表“dtb
”转换为 R 中的 data.frame。
我已经在 C# 中定义了这个数据表,但我需要在 R 中进行计算,这就是为什么我需要将它传递给 R。
我想你可以在这里得到你的解决方案.. Passing DataTable over COM into R
这个有更好的解释
这在 R.NET 1.6.5 中有效并输出:
没有找到将 DataTable 转换为字符串 [] 的好方法,正如 CreateCharacterMatrix 所期望的那样,但 CreateDataFrame 是另一种可能性,但它需要 IEnumerable[] 并且是面向列的(如 data.frame 在 R 中) .
通过源代码中的测试可能会有进一步的帮助:
https://github.com/jmp75/rdotnet/tree/master/RDotNet.Tests
还有这个:https://github.com/jmp75/rdotnet-onboarding
这在某些方面更有帮助,因为官方文档很少:
https://jmp75.github.io/rdotnet/getting_started/
using System;
using System.Data;
using RDotNet;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable dtb = new DataTable();
dtb.Columns.Add("Column1", Type.GetType("System.String"));
dtb.Columns.Add("Column2", Type.GetType("System.String"));
DataRow dtr1 = dtb.NewRow();
dtr1[0] = "abc";
dtr1[1] = "cdf";
dtb.Rows.Add(dtr1);
DataRow dtr2 = dtb.NewRow();
dtr2[0] = "asdasd";
dtr2[1] = "cdasdasf";
dtb.Rows.Add(dtr2);
using (var engine = REngine.GetInstance())
{
string[,] stringData = new string[dtb.Rows.Count, dtb.Columns.Count];
for (int row = 0; row < dtb.Rows.Count; row++)
{
for (int col = 0; col < dtb.Columns.Count; col++)
{
stringData[row, col] = dtb.Rows[row].ItemArray[col].ToString();
}
}
CharacterMatrix matrix = engine.CreateCharacterMatrix(stringData);
engine.SetSymbol("myRDataFrame", matrix);
engine.Evaluate("myRDataFrame <- as.data.frame(myRDataFrame, stringsAsFactors = FALSE)");
engine.Evaluate("str(myRDataFrame)");
}
Console.ReadKey();
}
}
}
我需要将定义如下的数据 table 转换为 R 中的数据框。
DataTable dtb = new DataTable();
dtb.Columns.Add("Column1", Type.GetType("System.String"));
dtb.Columns.Add("Column2", Type.GetType("System.String"));
DataRow dtr1 = dtb.NewRow();
dtr1[0] = "abc";
dtr1[1] = "cdf";
dtb.Rows.Add(dtr1);
DataRow dtr2 = dtb.NewRow();
dtr2[0] = "asdasd";
dtr2[1] = "cdasdasf";
dtb.Rows.Add(dtr2);
有什么方法可以将上面的数据表“dtb
”转换为 R 中的 data.frame。
我已经在 C# 中定义了这个数据表,但我需要在 R 中进行计算,这就是为什么我需要将它传递给 R。
我想你可以在这里得到你的解决方案.. Passing DataTable over COM into R 这个有更好的解释
这在 R.NET 1.6.5 中有效并输出:
没有找到将 DataTable 转换为字符串 [] 的好方法,正如 CreateCharacterMatrix 所期望的那样,但 CreateDataFrame 是另一种可能性,但它需要 IEnumerable[] 并且是面向列的(如 data.frame 在 R 中) .
通过源代码中的测试可能会有进一步的帮助: https://github.com/jmp75/rdotnet/tree/master/RDotNet.Tests
还有这个:https://github.com/jmp75/rdotnet-onboarding
这在某些方面更有帮助,因为官方文档很少: https://jmp75.github.io/rdotnet/getting_started/
using System;
using System.Data;
using RDotNet;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable dtb = new DataTable();
dtb.Columns.Add("Column1", Type.GetType("System.String"));
dtb.Columns.Add("Column2", Type.GetType("System.String"));
DataRow dtr1 = dtb.NewRow();
dtr1[0] = "abc";
dtr1[1] = "cdf";
dtb.Rows.Add(dtr1);
DataRow dtr2 = dtb.NewRow();
dtr2[0] = "asdasd";
dtr2[1] = "cdasdasf";
dtb.Rows.Add(dtr2);
using (var engine = REngine.GetInstance())
{
string[,] stringData = new string[dtb.Rows.Count, dtb.Columns.Count];
for (int row = 0; row < dtb.Rows.Count; row++)
{
for (int col = 0; col < dtb.Columns.Count; col++)
{
stringData[row, col] = dtb.Rows[row].ItemArray[col].ToString();
}
}
CharacterMatrix matrix = engine.CreateCharacterMatrix(stringData);
engine.SetSymbol("myRDataFrame", matrix);
engine.Evaluate("myRDataFrame <- as.data.frame(myRDataFrame, stringsAsFactors = FALSE)");
engine.Evaluate("str(myRDataFrame)");
}
Console.ReadKey();
}
}
}