PDA

查看完整版本 : 在Matlab和R之间共享大型数据集


poster
2019-12-14, 20:13
我需要一种相对有效的方法来在Matlab和R (http://en.wikipedia.org/wiki/R_(programming_language))之间共享数据。

我已经检查过SaveR (http://www.mathworks.com/matlabcentral/fileexchange/28370)和MATLAB R-link (http://www.mathworks.com/matlabcentral/fileexchange/5051) ,但是SaveR首先将 Matlab的二进制数据格式化 (http://en.wikipedia.org/wiki/Serialization)为文本字符串,然后将它们打印到ASCII文件,这对于大型数据集而言效率不高,而且MATLAB R-link仅在Windows上有效(它使用基于COM的界面)。

更新:

Dirk发布了一份清单,列出了比SaveR和Matlab R-link更好的解决方案。我最近还了解了RAM磁盘 (http://en.wikipedia.org/wiki/RAM_disk) (有关一些实现示例,请参见此处 (https://superuser.com/questions/34388/whats-the-best-ramdisk-for-windows)和此处 (https://superuser.com/questions/175861/ramdisk-ubuntu-10-04) ),并认为它们可能有助于进一步在Matlab和R(或类似的计算环境)之间共享大型数据集。这使我想到以下问题:

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


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

在处理RAM磁盘而不是二级存储解决方案时,是否还要考虑其他因素?

谢谢!



回答:

需要注意的是,我有一些关于R方面的知识:


CRAN上的R.matlab (http://cran.r-project.org/package=R.matlab)软件包可以帮助您: 该软件包提供读取和写入MAT文件的方法。它还使与在本地或远程主机上运行的Matlab v6或更高版本进行通信(评估代码,发送和检索对象等)成为可能。

正如您所建议的, HDF5 (http://en.wikipedia.org/wiki/HDF5)是可能的,但我听说CRAN软件包hdf5 (http://cran.r-project.org/web/packages/hdf5/index.html)中的R支持有些基本

NetCDF (http://www.unidata.ucar.edu/software/netcdf/)可能是替代方案; CRAN具有软件包RNetCDF (http://cran.r-project.org/package=RNetCDF) , ncdf (http://cran.r-project.org/package=ncdf)和ncdf4 (http://cran.r-project.org/package=ncdf4)

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

使用通用的序列化/反序列化格式; R通过RProtoBuf (http://dirk.eddelbuettel.com/code/rprotobuf.html)支持Google协议缓冲区,Google指向用于Matlab的protobuf-matlab (http://code.google.com/p/protobuf-matlab/)

自己写!尤其是当您只需要基本的东西(例如大矩形矩阵)时,没有什么比直接的二进制写更好。几年前,我为Octave(与Matlab接近)进行了此操作。您可以通过mex文件扩展Matab。 R有它的API和诸如Rcpp的 (http://dirk.eddelbuettel.com/code/rcpp.html)助手。数据集越大,保存转换时看起来就越有吸引力。



更多&回答... (https://stackoverflow.com/questions/4771144)