59

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

更新

我发现了一个rhdf5不属于 CRAN 但属于 BioConductoR 的包。界面相对比较容易理解,文档和示例代码也比较清晰。我可以毫无问题地使用它。我的问题似乎是输入文件。我想读取的矩阵实际上hdf5python pickle. 所以每次我试图打开它并通过它访问它时,R我都会得到一个segmentation fault. 我确实想出了如何将矩阵从内部保存pythontsv文件,现在问题已经解决了。

4

4 回答 4

54

rhdf5软件包运行良好,尽管它不在 CRAN 中。从Bioconductor安装它

# as of 2020-09-08, these are the updated instructions per
# https://bioconductor.org/install/

if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
BiocManager::install(version = "3.11")

并使用它:

library(rhdf5)

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

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

读取 HDF5 数据:

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

检查结构

str(mydata)

(请注意,多维数组可能会出现转置)。您还可以阅读组,这些组将在 R 中命名为列表。

于 2013-10-21T04:26:18.213 回答
22

您还可以使用h5,这是我最近在 CRAN 上发布的一个包。与之相比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%。

要保存矩阵,您可以使用:

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

于 2015-06-12T14:35:57.553 回答
4

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

用开发者的话来说:

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

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

在实践中,ncdf4提供了一个简单的界面,并且将代码从使用旧包hdf5ncdf包迁移到单个ncdf4包使我们的代码更少错误并且更容易编写(我的一些试验和解决方法记录在我之前的答案中)。

于 2013-07-03T21:44:58.610 回答
4

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

或者,尝试将文件从 转换hdf5netcdf. 一旦它们在 netcdf 中,您就可以使用优秀的ncdf包来访问数据。我认为可以使用该cdo工具完成转换。

于 2013-04-12T15:06:43.650 回答