在 Matlab 和 R 之间共享大型数据集
Posted
技术标签:
【中文标题】在 Matlab 和 R 之间共享大型数据集【英文标题】:Sharing large datasets between Matlab and R 【发布时间】:2011-06-13 20:34:02 【问题描述】:我需要一种相对有效的方式在 Matlab 和 R 之间共享数据。
我检查了SaveR和MATLAB R-link,但是SaveR formats先将Matlab的二进制数据作为文本字符串,然后将它们打印到ASCII文件中,这对于大型数据集效率不高, MATLAB R-link 仅适用于 Windows(它使用基于 COM 的接口)。
更新:
Dirk 发布了一个列表,其中列出了似乎比 SaveR 和 Matlab 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 中转置 Python 创建的 HDF5 数据集