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)
我已经检查过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)