15

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

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

更新:

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

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

  1. 到目前为止列出的任何解决方案是否更适合 RAM 磁盘?

  2. 在处理 RAM 磁盘而不是辅助存储解决方案时,是否还有其他需要考虑的因素?

谢谢!

4

2 回答 2

17

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

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

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

  • NetCDF可能是一个替代方案;CRAN 有包RNetCDFncdfncdf4

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

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

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

于 2011-01-22T23:11:43.383 回答
1

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

于 2011-01-22T23:12:41.740 回答