如何在R中处理hdf5文件?

7hiiyaii  于 2023-05-26  发布在  其他
关注(0)|答案(5)|浏览(170)

我有一个hdf5的文件。我知道它应该是一个矩阵,但我想读取R中的矩阵,以便我可以研究它。我看到有一个h5r包应该可以帮助解决这个问题,但我没有看到任何简单的阅读/理解教程。这样的教程在网上有吗。具体来说,如何用这个包读取hdf5对象,以及如何实际提取矩阵?
更新
我发现了一个软件包rhdf5,它不是CRAN的一部分,而是BioConductoR的一部分。界面相对容易理解,文档和示例代码相当清晰。我可以使用它没有问题。我的问题似乎是输入文件。我想要读取的矩阵实际上存储在hdf5文件中,作为python pickle。所以每次我试图打开它并通过R访问它时,我都会得到一个segmentation fault。我确实弄清楚了如何将python中的矩阵保存为tsv文件,现在这个问题解决了。

pb3skfrl

pb3skfrl1#

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")

inspect the structure

str(mydata)

(Note多维数组may appear transposed)。你也可以读取组,它们在R中被命名为列表。

eqqqjvef

eqqqjvef2#

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

  1. S4对象模型直接与文件、组、数据集和属性等HDF5对象交互。
    1.语法更简单,为支持readdata <- dataset[1:3, 1:3] dataset[1:3, 1:3] <- matrix(1:9, nrow = 3)等命令的数据集实现了类似R的子集运算符
    1.所有数据类型支持的NA值
  2. 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

ccrfmcuu

ccrfmcuu3#

我使用rgdal包读取HDF5文件。您需要注意的是,rgdal的二进制版本可能不支持hdf5。在这种情况下,您需要在从源代码构建rgdal之前从源代码构建gdal并支持HDF5。
或者,尝试将文件从hdf5转换为netcdf。一旦它们位于netcdf中,您就可以使用优秀的ncdf包来访问数据。我认为转换可以用cdo tool完成。

pgpifvop

pgpifvop4#

ncdf4包是netCDF-4的接口,也可以用来读取hdf 5文件(netCDF-4与netCDF-3兼容,但它使用hdf 5作为存储层)。
用开发者的话说:

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

netCDF-4格式通过使用HDF 5的增强版本作为存储层来实现和扩展netCDF-3数据模型。
在实践中,ncdf4提供了一个简单的接口,并且将使用旧的hdf5ncdf包的代码迁移到单个ncdf4包中,使得our code的错误更少,更容易编写(我的一些试验和解决方法在my previous answer中有文档记录)。

4bbkushb

4bbkushb5#

解决我的问题:

# in Linux terminal
1. sudo apt-get install libhdf5-dev

#then in the R console write
2. BiocManager::install('rhdf5')
3. install.packages("hdf5r")

相关问题