J'ai un fichier dans hdf5
format. Je sais que c'est censé être une matrice, mais je veux lire cette matrice dans R
pour pouvoir l'étudier. Je vois qu'il y a un h5r
package qui est censé aider à cela, mais je ne vois aucun tutoriel simple à lire/à comprendre. Un tel tutoriel est-il disponible en ligne? Plus précisément, comment lisez-vous un hdf5
objet avec ce package, et comment réellement extraire la matrice?
MISE À JOUR
J'ai découvert un package rhdf5
qui ne fait pas partie de CRAN mais fait partie de BioConductoR. L'interface est relativement plus facile à comprendre la documentation et l'exemple de code est assez clair. Je pourrais l'utiliser sans problème. Mon problème semble être le fichier d'entrée. La matrice que je voulais lire était en fait stockée dans le hdf5
fichier en tant que python pickle
. Donc, chaque fois que j'essayais de l'ouvrir et d'y accéder via R
j'ai un segmentation fault
. J'ai compris comment enregistrer la matrice à partir de python
en tant que fichier tsv
et maintenant ce problème est résolu.
Le rhdf5
le package fonctionne très bien, bien qu'il ne soit pas dans CRAN. Installez-le depuis Bioconducteur
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")
Et pour l'utiliser:
library(rhdf5)
Répertoriez les objets dans le fichier pour trouver le groupe de données que vous souhaitez lire:
h5ls("path/to/file.h5")
Lisez 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 également utiliser h5 , un package que j'ai récemment publié sur CRAN. Comparé à rhdf5
, Il présente les caractéristiques suivantes:
readdata <- dataset[1:3, 1:3] dataset[1:3, 1:3] <- matrix(1:9, nrow = 3)
Pour enregistrer 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 package rgdal
pour lire les fichiers HDF5. Vous devez vous assurer que la version binaire de rgdal
ne prend probablement pas en charge hdf5
. Dans ce cas, vous devez créer gdal
à partir de la source avec le support HDF5 avant de construire rgdal
à partir de la source.
Vous pouvez également essayer de convertir les fichiers à partir de hdf5
à netcdf
. Une fois qu'ils sont dans netcdf, vous pouvez utiliser l'excellent package ncdf
pour accéder aux données. La conversion, je pense, pourrait être effectuée avec l'outil cdo
.
Le ncdf4
package, une interface vers 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:
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
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.
En pratique, ncdf4
fournit une interface simple et la migration du code à partir de l'ancien hdf5
et ncdf
packages dans un seul ncdf4
le package a rendu notre code moins bogué et plus facile à écrire (certains de mes essais et solutions sont documentés dans ma réponse précédente ).