如何处理R中的hdf5文件?

Sam*_*Sam 48 r hdf5

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

UPDATE

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

Mik*_*e T 42

rhdf5虽然它不在CRAN中,但该包的效果非常好.从Bioconductor安装它

source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")
Run Code Online (Sandbox Code Playgroud)

并使用它:

library(rhdf5)
Run Code Online (Sandbox Code Playgroud)

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

h5ls("path/to/file.h5")
Run Code Online (Sandbox Code Playgroud)

阅读HDF5数据:

mydata <- h5read("path/to/file.h5", "/mygroup/mydata")
Run Code Online (Sandbox Code Playgroud)

检查结构:

str(mydata)
Run Code Online (Sandbox Code Playgroud)

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

  • 在读入h5文件之前,可以使用函数h5ls("path/to/file.h5"). (4认同)
  • 这是一个好的开始。这是一个体面的教程,详细介绍了 rdhf5 的使用 http://www.r-bloggers.com/working-with-hdf-files-in-r-example-pathfinder-sst-data/ (2认同)

use*_*626 20

你也可以使用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)
Run Code Online (Sandbox Code Playgroud)

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

file <- h5file("test.h5")
testmat_in <- file["testgroup", "testmat"][]
h5close(file)
Run Code Online (Sandbox Code Playgroud)

另见h5

  • `h5` 已贬值,取而代之的是 `hdf5r ` (3认同)

Pau*_*tra 5

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

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


Dav*_*uer 5

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

用开发者的话说:

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

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

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