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

15
我需要一种相对高效的方法,在Matlab和R之间共享数据。
我已经检查过SaveRMATLAB R-link,但是SaveR Matlab的二进制数据格式化为文本字符串,然后将它们打印到ASCII文件中,这对于大型数据集来说并不高效,而MATLAB R-link仅适用于Windows(它使用基于COM的接口)。
更新:
Dirk发布了一个列表,似乎比SaveRMatlab R-link更好地解决了这个问题。我最近也了解到RAM磁盘(请参见herehere以获取一些实现示例),并认为它们可以进一步促进在Matlab和R(或类似的计算环境)之间共享大型数据集的任务。这引出了以下问题:
假设数据适合于Matlab或R的本地数据容器,请问:
  1. 到目前为止,列出的解决方案中是否有更适合RAM磁盘的?

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

谢谢!

2个回答

17

以下是几个想法,但需要注意的是我对R方面更了解:

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

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

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

  • 使用数据库,特别是像SQLite或H4这样轻量级且基于文件的数据库,两者都有R支持

  • 使用常见的序列化/反序列化格式;R支持Google Protocol Buffers,可以通过RProtoBuf实现,而Google则指向protobuf-matlab来实现Matlab

  • 自己编写!特别是当您只需要一些基本的大型矩阵时,没有什么比直接二进制写入更好的了;我几年前曾为Octave(与Matlab相似)做过这样的事情。您可以通过mex文件扩展Matab;R有其API和像Rcpp这样的帮助程序。数据集越大,这种方法就越具吸引力,因为您可以省去转换的步骤。


1
对于HDF5和R,我发现h5r包可用,但不完整。http://cran.r-project.org/web/packages/h5r/index.html - f3lix

1

Matlab在最新版本中原生支持HDF5(“save”和“load”)。R语言有一个package。因此,HDF5可能是一个不错的解决方案。


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