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

时间:2011-01-22 22:50:59

标签: r matlab hdf5 ramdisk

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

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

更新

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

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

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

  2. 还有其他的吗? 需要考虑的因素 处理RAM磁盘时的帐户 而不是与secundary-storage 溶液

  3. 谢谢!

2 个答案:

答案 0 :(得分:17)

一些想法,以及我对R方面了解更多的警告:

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

  • HDF5,如你所说,是可能的,但我听说CRAN包hdf5中的R支持有些基本

  • NetCDF可能是另类选择; CRAN包含RNetCDFncdfncdf4

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

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

  • 自己写!特别是当你只需要像大矩形矩阵这样基本的东西时,没有什么能比直接二进制写入更好;几年前我为Octave做了这个(接近Matlab)。您可以通过mex文件扩展Matab; R有它的API和帮助,如Rcpp。数据集越大,保存转换时看起来越有吸引力。

答案 1 :(得分:1)

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