C# - 将 R 数据框转换为 Deedle.Frame

3
我有一个C#应用程序,需要Deedle框架作为输入数据。我还有一个返回数据帧的R脚本,我不想通过C#重新实现算法。 我尝试使用R.Net,在C#应用程序中从R脚本中获取数据帧,但其类型是RDotNet.DataFrame。 在C#代码中是否有任何方法将RDotNet.DataFrame转换为Deedle Frame?
我还考虑创建一个调用R脚本的F# dll库,然后在C#代码中使用该dll库。这可行吗?
1个回答

1
如果您在F#中使用Deedle,则还可以使用R类型提供程序。两者完美地集成在一起,您可以从F#调用R并获得一个Deedle数据框架。Deedle文档中有一个很好的例子
R提供程序会自动将R数据框架转换为Deedle框架。例如:
open RProvider.datasets

// Get mtcars as a typed Deedle frame
let mtcars : Frame<string, string> = R.mtcars.GetValue()

R提供程序和Deedle中执行转换的源代码也是可用的。因此,如果您想直接使用它,可以从tryCreateFrame函数在Deedle源代码中开始。
目前这并没有向C#公开,但我们非常欢迎拉取请求,使其对Deedle可行 :-)。

我现在可以使用F#获取由R脚本返回的Frame。 但是如何将Deedle Frame发送到R脚本呢?我想构建一个应用程序,接收Deedle Frame作为输入数据,进行一些数据处理,然后将Deedle Frame作为输出数据返回。 - Ha Pham
这应该也可以自动与 R 提供程序一起使用。每当您将 Deedle 帧传递给由 R 提供程序导出的函数时,它将自动转换为 R 帧。请参见:http://bluemountaincapital.github.io/Deedle/rinterop.html#From-Deedle-to-R - Tomas Petricek
当我运行这行代码 R.assign("dataframe", frame) 时,frame 是一个 Deedle.Frame,我发现它也会将数据框打印到控制台屏幕上。但是当我运行 R.assign("text",text) 时,text 是一个文本字符串,它不会打印任何东西。而且 let frame : Frame<int,string> = result.GetValue() 这行代码也会打印数据。 所以我认为在 Deedle.Frame 和 R Frame 之间的转换确实会打印数据。 有没有什么方法可以避免这种情况? - Ha Pham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接