如何处理R中的hdf5文件?

时间:2013-04-12 14:57:51

标签: r hdf5

我有一个hdf5格式的文件。我知道它应该是一个矩阵,但我想在R中读取该矩阵,以便我可以研究它。我看到有一个h5r包可以帮助解决这个问题,但是我没有看到任何简单的阅读/理解教程。这样的教程是否可在线获取。具体来说,你如何阅读这个包的hdf5对象,以及如何实际提取矩阵?

更新

我发现了一个包rhdf5,它不是CRAN的一部分,但却是BioConductoR的一部分。界面相对容易理解文档和示例代码非常清楚。我可以毫无问题地使用它。我的问题似乎是输入文件。我想要阅读的矩阵实际上作为hdf5存储在python pickle文件中。因此,每当我尝试打开并通过R访问它时,我都会获得segmentation fault。我确实想出如何将python内的矩阵保存为tsv文件,现在该问题已解决。

4 个答案:

答案 0 :(得分:39)

rhdf5包工作得很好,尽管它不在CRAN中。从Bioconductor

安装
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")

使用它:

library(rhdf5)

列出文件中的对象以查找要读取的数据组:

h5ls("path/to/file.h5")

阅读HDF5数据:

mydata <- h5read("path/to/file.h5", "/mygroup/mydata")

inspect the structure

str(mydata)

(注意多维数组may appear transposed)。您还可以阅读组,这些组将在R。

中命名为列表

答案 1 :(得分:19)

你也可以使用我最近在CRAN上发布的 h5 这个包。 与rhdf5相比,它具有以下功能:

  1. S4对象模型,可直接与文件,组,数据集和属性等HDF5对象进行交互。
  2. 更简单的语法,为支持命令的数据集实现了类似R的子集运算符 readdata <- dataset[1:3, 1:3] dataset[1:3, 1:3] <- matrix(1:9, nrow = 3)
  3. 支持所有数据类型的NA值
  4. 200+测试用例,代码覆盖率为80%+。
  5. 要保存矩阵,您可以使用:

    library(h5)
    testmat <- matrix(rnorm(120), ncol = 3)
    # Create HDF5 File
    file <- h5file("test.h5")
    # Save matrix to file in group 'testgroup' and datasetname 'testmat'
    file["testgroup", "testmat"] <- testmat
    # Close file
    h5close(file)
    

    ...并将整个矩阵读回R:

    file <- h5file("test.h5")
    testmat_in <- file["testgroup", "testmat"][]
    h5close(file)
    

    另见

    上的h5

答案 2 :(得分:5)

我使用rgdal包来读取HDF5文件。您确实需要注意rgdal的二进制版本可能不支持hdf5。在这种情况下,您需要从源代码构建gdal并使用HDF5支持,然后才能从源代码构建rgdal

或者,尝试将文件从hdf5转换为netcdf。一旦它们在netcdf中,您就可以使用优秀的ncdf包来访问数据。我认为可以使用cdo tool进行转换。

答案 3 :(得分:4)

ncdf4包,netCDF-4的接口,也可用于读取hdf5文件(netCDF-4与netCDF-3兼容,但它使用hdf5作为存储层)。

用开发人员的话来说:

  

NetCDF-4结合了netCDF-3和HDF5数据模型,采用了每种数据的理想特性,同时利用了它们各自的优势

  

netCDF-4格式通过使用增强版HDF5作为存储层来实现和扩展netCDF-3数据模型。

在实践中,ncdf4提供了一个简单的界面,并且将使用较旧的hdf5ncdf包的代码迁移到单个ncdf4包已our code更少的错误和更容易编写(我的一些试验和解决方法记录在my previous answer)。