Comment gérer les fichiers hdf5 en R?
j'ai un fichier au format hdf5
. Je sais que c'est censé être une matrice, mais je veux lire cette matrice dans R
afin que je puisse l'étudier. Je vois qu'il y a un paquet h5r
qui est supposé aider avec cela, mais je ne vois pas de tutoriel simple à lire/comprendre. Est un tutoriel disponible en ligne. Plus précisément, comment lire un objet hdf5
avec ce paquet, et comment extraire réellement la matrice?
mise à jour
j'ai trouvé un paquet rhdf5
qui ne fait pas partie du CRAN mais fait partie du Bioconducteur. L'interface est relativement plus facile à comprendre la documentation et le code d'exemple est assez clair. J'ai pu l'utiliser sans problèmes. Mon problème semble le fichier d'entrée. La matrice que je voulais lire était en fait stockée dans le fichier hdf5
en tant que python pickle
. Donc chaque fois que j'ai essayé de l'ouvrir et d'y accéder par R
j'ai eu un segmentation fault
. Je j'ai trouvé comment sauvegarder la matrice dans python
comme un fichier tsv
et maintenant ce problème est résolu.
4 réponses
le paquet rhdf5
fonctionne très bien, bien qu'il ne soit pas dans CRAN. Installez-le à partir de Bioconducteur
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")
et de l'utiliser:
library(rhdf5)
Liste des objets dans le fichier pour trouver le groupe de données que vous voulez lire:
h5ls("path/to/file.h5")
lire les données HDF5:
mydata <- h5read("path/to/file.h5", "/mygroup/mydata")
str(mydata)
(notez que les tableaux multidimensionnels peuvent apparaître transposés ). Vous pouvez également lire des groupes, qui seront nommés listes dans R.
vous pouvez aussi utiliser h5 , un paquet que j'ai récemment publié sur CRAN.
Comparé à rhdf5
il présente les caractéristiques suivantes:
- S4 modèle d'objet pour interagir directement avec HDF5 des objets tels que des fichiers, des groupes, des ensembles de données et les attributs.
- syntaxe plus simple, mis en œuvre R-like subsetting operators pour les ensembles de données supportant des commandes comme
readdata <- dataset[1:3, 1:3] dataset[1:3, 1:3] <- matrix(1:9, nrow = 3)
- Appuyé NA les valeurs de toutes les types de données
- 200 + cas D'essai avec une couverture de code de 80%+.
pour sauvegarder une matrice, vous pouvez utiliser:
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)
... et relisez la matrice entière dans R:
file <- h5file("test.h5")
testmat_in <- file["testgroup", "testmat"][]
h5close(file)
Voir aussi h5 sur
j'ai utilisé le paquet rgdal
pour lire des fichiers HDF5. Vous devez prendre soin que probablement la version binaire de rgdal
ne supporte pas hdf5
. Dans ce cas, vous devez construire gdal
à partir des sources avec le support HDF5 avant de construire rgdal
à partir des sources.
alternativement, essayez de convertir les fichiers de hdf5
en netcdf
. Une fois qu'ils sont dans netcdf, vous pouvez utiliser l'excellent paquet ncdf
pour accéder aux données. Le la conversion je pense pourrait être fait avec le cdo
outil .
le paquet ncdf4
, une interface avec netCDF-4, peut également être utilisé pour lire des fichiers hdf5 (netCDF-4 est compatible avec netCDF-3, mais il utilise hdf5 comme couche de stockage).
dans les mots du développeur:
- le HDF groupe dit:
NetCDF-4 combine les modèles de données netCDF-3 et HDF5, en prenant les caractéristiques souhaitables de chacun, tout en tirant parti de leurs forces distinctes
- Unidata says:
le format netCDF-4 implémente et étend le modèle de données netCDF-3 en utilisant une version améliorée de HDF5 comme couche de stockage.
dans la pratique, ncdf4
fournit une interface simple, et le code de migration de l'utilisation plus ancienne hdf5
et ncdf
paquets à un seul ncdf4
paquet a fait notre code moins buggé et plus facile à écrire (certains de mes essais et les solutions de contournement sont documentées dans ma réponse précédente ).