我被要求更改当前导出.Rdata文件的软件,以便以“平台无关的二进制格式”导出,例如HDF5或netCDF。有两个原因:
我还发现"R Data import export manual"没有讨论Rdata文件,尽管它确实讨论了HDF5和netCDF。
discussion on R-help表明.Rdata文件与平台无关。
答案 0 :(得分:28)
答案 1 :(得分:9)
(二进制)文件格式有两种基本形式:
应用程序中立 ,受公共库和API支持(netCDF和HDF5都属于此阵营),便于交换数据不同的程序和应用程序如果使用API
特定于应用程序的 仅适用于一个程序的程序,虽然效率更高:这就是.RData的作用
因为R是开源的,所以你可以从你的Matlab文件中重新创建RData格式:没有什么可以阻止你编写一个合适的mex文件。也许有人甚至已经做过了。没有技术理由不尝试 - 但如果两个应用程序意图共享数据同样支持格式,则其他途径可能会更容易。
对于它的价值,回到20世纪90年代早期/中期,我确实编写了自己的C代码来编写Octave使用的二进制格式的模拟文件(我用它然后切片数据)。能够使用开源软件实现这一目标是一大优点。
答案 2 :(得分:5)
我想我可以回答一些问题,但不是所有这些问题。
好吧,任何想出这件事的人都可以直接阅读.Rdata
文件,但这很难,也没什么好处。所以我怀疑Matlab已经做到了。您可能还记得,R可以精确地阅读各种其他系统格式,因为有人付出了很多努力。
对于文本格式,csv看起来很“标准”,但对于我不知道的二进制格式 - 而且csv不是一个很好的标准 - 它变化很大(特别是)日期和引用的处理方式(和当然它只适用于数据表。)
当然!
示例:
for(f in list.files(".", pattern="\\.Rdata$") {
e <- new.env()
load(f, e) # load all values into environment e
x <- as.list(e)
#saveInOtherFormat(x, file=sub("\\.Rdata$", ".Other", f))
}
答案 3 :(得分:4)
第2点是错误的:二进制.RData文件 可以通过硬件移植。 OS平台。要从帮助页面引用?save:
所有R平台都使用C ints的XDR(bigendian)表示,并在二进制save-d文件中加倍,并且这些平台可在所有R平台上移植。
第1点是数据的函数,以及可能有用的其他程序应用于数据。如果您的代码库使用save()来编写数据帧或矩阵的指定对象,您可以轻松编写一个小函数save2hdf()将它们写为hdf或ncdf二进制文件,然后使用sed更改所有出现的save(到save2hdf(在你的代码库中。至少ncdf会对读取产生性能影响,但是命中率不会太差。如果你的代码使用保存对象,比如异构对象列表,你可能无法使用ncdf或hdf重新编码以写出单独的组件对象。
另请注意,netCDF 4在R中仍然存在问题。