trabajar studio leer importar exportar datos con commander cargar r hdf5

studio - ¿Cómo lidiar con los archivos hdf5 en R?



leer csv en r (4)

Tengo un archivo en formato hdf5 . Sé que se supone que es una matriz, pero quiero leer esa matriz en R para poder estudiarla. Veo que hay un paquete h5r que debería ayudar con esto, pero no veo ningún tutorial sencillo de leer / entender. Es un tutorial de este tipo disponible en línea. Específicamente, ¿Cómo lees un objeto hdf5 con este paquete y cómo realmente extraes la matriz?

ACTUALIZAR

Descubrí un paquete rhdf5 que no es parte de CRAN pero es parte de BioConductoR. La interfaz es relativamente más fácil de entender, la documentación y el código de ejemplo es bastante claro. Podría usarlo sin problemas. Mi problema parece ser el archivo de entrada. La matriz que quería leer estaba realmente almacenada en el archivo hdf5 como un python pickle . Así que cada vez que intentaba abrirlo y acceder a él a través de R i obtenía un segmentation fault . Descubrí cómo guardar la matriz desde python como un archivo tsv y ahora ese problema está resuelto.


El paquete ncdf4 , una interfaz para netCDF-4, también se puede utilizar para leer archivos hdf5 (netCDF-4 es compatible con netCDF-3, pero utiliza hdf5 como capa de almacenamiento).

En las palabras del desarrollador:

NetCDF-4 combina los modelos de datos netCDF-3 y HDF5, tomando las características deseables de cada uno, mientras aprovecha sus fortalezas separadas

El formato netCDF-4 implementa y expande el modelo de datos netCDF-3 utilizando una versión mejorada de HDF5 como la capa de almacenamiento.

En la práctica, ncdf4 proporciona una interfaz simple, y migrar el código de usar los paquetes hdf5 y ncdf a un solo paquete ncdf4 ha hecho que nuestro código tenga menos errores y sea más fácil de escribir (algunas de mis pruebas y soluciones están documentadas en mi respuesta anterior ).


El paquete rhdf5 funciona realmente bien, aunque no está en CRAN. Instalarlo desde Bioconductor

source("http://bioconductor.org/biocLite.R") biocLite("rhdf5")

Y para usarlo:

library(rhdf5)

Liste los objetos dentro del archivo para encontrar el grupo de datos que desea leer:

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

Lea los datos de HDF5:

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

E inspeccionar la estructura :

str(mydata)

(Tenga en cuenta que las matrices multidimensionales pueden aparecer transpuestas ). También puedes leer grupos, que se nombrarán listas en R.


También puedes usar h5 , un paquete que publiqué recientemente en CRAN. Comparado con rhdf5 tiene las siguientes características:

  1. Modelo de objetos S4 para interactuar directamente con objetos HDF5 como archivos, grupos, conjuntos de datos y atributos.
  2. Sintaxis más simple, se implementaron operadores de subconjunto tipo R para conjuntos de datos que admiten comandos como readdata <- dataset[1:3, 1:3] dataset[1:3, 1:3] <- matrix(1:9, nrow = 3)
  3. Valores de NA soportados para todos los tipos de datos
  4. Más de 200 casos de prueba con un código de cobertura del 80% +.

Para guardar una matriz puedes usar:

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)

... y lea toda la matriz de nuevo en R:

file <- h5file("test.h5") testmat_in <- file["testgroup", "testmat"][] h5close(file)

Véase también h5 en


Utilicé el paquete rgdal para leer archivos HDF5. rgdal tener cuidado de que probablemente la versión binaria de rgdal no admita hdf5 . En ese caso, necesita compilar gdal desde la fuente con soporte HDF5 antes de rgdal desde la fuente.

Alternativamente, intente y convierta los archivos de hdf5 a netcdf . Una vez que estén en netcdf, puede usar el excelente paquete ncdf para acceder a los datos. La conversión creo que podría hacerse con la herramienta cdo .