在 Matlab 和 R 之间共享大型数据集

Posted

技术标签:

【中文标题】在 Matlab 和 R 之间共享大型数据集【英文标题】:Sharing large datasets between Matlab and R 【发布时间】:2011-06-13 20:34:02 【问题描述】:

我需要一种相对有效的方式在 Matlab 和 R 之间共享数据。

我检查了SaveRMATLAB R-link,但是SaveR formats先将Matlab的二进制数据作为文本字符串,然后将它们打印到ASCII文件中,这对于大型数据集效率不高, MATLAB R-link 仅适用于 Windows(它使用基于 COM 的接口)。

更新:

Dirk 发布了一个列表,其中列出了似乎比 SaveRMatlab R-link 更好的解决方案。我最近还了解了RAM disks(有关一些实现示例,请参见here 和here),并认为它们可能有助于在 Matlab 和 R(或类似的计算环境)之间进一步共享大型数据集的任务。这导致我提出以下问题:

假设数据适合 Matlab 或 R 的本机数据容器中的机器内存:

    是否列出了任何解决方案 更适合 RAM 磁盘?

    还有其他的吗 需要考虑的因素 处理 RAM 磁盘时的帐户 而不是二级存储 解决方案?

谢谢!

【问题讨论】:

【参考方案1】:

几个想法,并且需要注意的是我对 R 方面的了解更多:

CRAN 上的 R.matlab 包可以提供帮助:这个包提供了读取和写入 MAT 文件的方法。它还可以与本地或远程主机上运行的 Matlab v6 或更高版本进行通信(评估代码、发送和检索对象等)

HDF5,正如你所建议的,是一种可能性,但我听说 CRAN 包 hdf5 中的 R 支持有点基本

NetCDF 可能是另一种选择; CRAN 有包RNetCDF、ncdf 和ncdf4

使用数据库,尤其是轻量级和基于文件的数据库,如 SQLite 或 H4,它们都支持 R

使用通用的序列化/反序列化格式; R 通过RProtoBuf 支持谷歌协议缓冲区,谷歌指向protobuf-matlab 用于 Matlab

自己写!尤其是当您只需要大型矩形矩阵之类的基本内容时,没有什么比直接二进制写入更好了;几年前我为 Octave(接近 Matlab)做过一次。您可以通过 mex 文件扩展 Matab; R 有它的 API 和帮助程序,例如 Rcpp。您的数据集越大,保存转化数据时看起来就越有吸引力。

【讨论】:

对于 HDF5 和 R,我发现 h5r 包可用,但不完整 cran.r-project.org/web/packages/h5r/index.html【参考方案2】:

Matlab 在最新版本中原生使用 HDF5(“保存”和“加载”)。 R 有一个package。那么 HDF5 可能是一个很好的解决方案。

【讨论】:

以上是关于在 Matlab 和 R 之间共享大型数据集的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MATLAB 中创建和保存大型数据集?

在 R 中处理大型数据集

在 Matlab 中转置 Python 创建的 HDF5 数据集

在 R 中匹配和合并具有不同列名的数据集

使用 matlab 和 R 计算数据集的 PCA,但每个组件的方差不同

用更少的时间在 R 中绘制大型数据集