如何在R中处理hdf5文件?

如何在R中处理hdf5文件?,r,hdf5,R,Hdf5,我有一个hdf5格式的文件。我知道它应该是一个矩阵,但我想在R中阅读该矩阵,以便我可以研究它。我看到有一个h5r包应该可以帮助实现这一点,但我没有看到任何易于阅读/理解的教程。网上有这样的教程吗。具体来说,如何使用此包读取hdf5对象,以及如何实际提取矩阵 更新 我发现了一个包rhdf5,它不是CRAN的一部分,而是BioConductoR的一部分。界面相对更容易理解,文档和示例代码都非常清晰。我可以毫无问题地使用它。我的问题似乎是输入文件。我想要读取的矩阵实际上作为python pickle存

我有一个
hdf5
格式的文件。我知道它应该是一个矩阵,但我想在
R
中阅读该矩阵,以便我可以研究它。我看到有一个
h5r
包应该可以帮助实现这一点,但我没有看到任何易于阅读/理解的教程。网上有这样的教程吗。具体来说,如何使用此包读取
hdf5
对象,以及如何实际提取矩阵

更新


我发现了一个包
rhdf5
,它不是CRAN的一部分,而是BioConductoR的一部分。界面相对更容易理解,文档和示例代码都非常清晰。我可以毫无问题地使用它。我的问题似乎是输入文件。我想要读取的矩阵实际上作为
python pickle
存储在
hdf5
文件中。因此,每次我试图打开它并通过
R
访问它时,我都会遇到
分段错误。我确实想出了如何将
python
中的矩阵保存为
tsv
文件,现在问题解决了。

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


或者,尝试将文件从
hdf5
转换为
netcdf
。一旦进入netcdf,您就可以使用优秀的
ncdf
包访问数据。我认为转换可以通过。

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

或者,尝试将文件从
hdf5
转换为
netcdf
。一旦进入netcdf,您就可以使用优秀的
ncdf
包访问数据。我认为转换可以通过。

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

用开发商的话说:

  • 报告说:
NetCDF-4结合了NetCDF-3和HDF5数据模型,利用了各自的理想特性,同时利用了各自的优势

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

实际上,
ncdf4
提供了一个简单的接口,将代码从使用较旧的
hdf5
ncdf
包迁移到单个
ncdf4
包可以减少错误,更容易编写(我的一些试验和解决方法在中有记录)。

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

用开发商的话说:

  • 报告说:
NetCDF-4结合了NetCDF-3和HDF5数据模型,利用了各自的理想特性,同时利用了各自的优势

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


实际上,
ncdf4
提供了一个简单的接口,将代码从使用较旧的
hdf5
ncdf
包迁移到单个
ncdf4
包可以减少错误,更容易编写(我的一些试验和解决方法在中有文档记录)。
rhdf5
包工作得非常好,虽然它不在克兰。从中安装它

使用它:

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

h5ls("path/to/file.h5")
读取HDF5数据:

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

(注意多维数组)。您还可以阅读组,这些组将被命名为R中的列表。

尽管不在CRAN中,但
rhdf5
包工作得非常好。从中安装它

使用它:

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

h5ls("path/to/file.h5")
读取HDF5数据:

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

(注意多维数组)。您还可以阅读组,这些组将被命名为R中的列表。

您还可以使用h5,这是我最近在CRAN上发布的一个包。 与
rhdf5
相比,它具有以下特点:

  • S4对象模型直接与HDF5对象交互,如文件、组、数据集和属性
  • 更简单的语法,为支持以下命令的数据集实现了类似R的子集运算符
    
    
    readdata您还可以使用h5,这是我最近在CRAN上发布的一个软件包。 与
    rhdf5
    相比,它具有以下特点:

  • S4对象模型直接与HDF5对象交互,如文件、组、数据集和属性
  • 更简单的语法,为支持以下命令的数据集实现了类似R的子集运算符
    
    
    readdata你能给我看一些模板代码吗?你现在的问题有点宽泛。如果您有更具体的问题,包括代码示例,请随时提问。您可以向我展示一些关于如何进行此操作的模板代码吗?您现在的问题有点广泛。如果您有更具体的问题,包括代码示例,请随时提出更多问题。确实是一个非常好的软件包。我曾考虑先使用CRAN提供的
    h5r
    软件包,但它似乎文档不足。如果您不介意依赖Bioconductor,那么
    rhdf5
    无疑是一个不错的选择。使用该功能可能会有所帮助
    file <- h5file("test.h5")
    testmat_in <- file["testgroup", "testmat"][]
    h5close(file)