与HDF5或netCDF相比,使用.Rdata文件有什么缺点?

时间:2011-10-20 15:08:06

标签: r file-format hdf5 netcdf

我被要求更改当前导出.Rdata文件的软件,以便以“平台无关的二进制格式”导出,例如HDF5或netCDF。有两个原因:

  1. Rdata文件只能由R
  2. 读取
  3. 二进制信息的存储方式取决于操作系统或体系结构
  4. 我还发现"R Data import export manual"没有讨论Rdata文件,尽管它确实讨论了HDF5和netCDF。

    discussion on R-help表明.Rdata文件与平台无关。

    问题:

    1. 这些问题在多大程度上有效?
      • e.g。 Matlab可以在不调用R?
      • 的情况下读取.Rdata
    2. 其他格式在这方面比.Rdata文件更有用吗?
    3. 是否可以编写一个脚本来创建所有.Rdata文件的.hdf5类似物,最大限度地减少对程序本身的更改?

4 个答案:

答案 0 :(得分:28)

答案 1 :(得分:9)

(二进制)文件格式有两种基本形式:

  • 应用程序中立 ,受公共库和API支持(netCDF和HDF5都属于此阵营),便于交换数据不同的程序和应用程序如果使用API​​

  • 使用附加软件包进行扩展
  • 特定于应用程序的 仅适用于一个程序的程序,虽然效率更高:这就是.RData的作用

因为R是开源的,所以你可以从你的Matlab文件中重新创建RData格式:没有什么可以阻止你编写一个合适的mex文件。也许有人甚至已经做过了。没有技术理由不尝试 - 但如果两个应用程序意图共享数据同样支持格式,则其他途径可能会更容易。

对于它的价值,回到20世纪90年代早期/中期,我确实编写了自己的C代码来编写Octave使用的二进制格式的模拟文件(我用它然后切片数据)。能够使用开源软件实现这一目标是一大优点。

答案 2 :(得分:5)

我想我可以回答一些问题,但不是所有这些问题。

  1. 好吧,任何想出这件事的人都可以直接阅读.Rdata文件,但这很难,也没什么好处。所以我怀疑Matlab已经做到了。您可能还记得,R可以精确地阅读各种其他系统格式,因为有人付出了很多努力。

  2. 对于文本格式,csv看起来很“标准”,但对于我不知道的二进制格式 - 而且csv不是一个很好的标准 - 它变化很大(特别是)日期和引用的处理方式(和当然它只适用于数据表。)

  3. 当然!

  4. 示例:

    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中仍然存在问题。