Можно ли обновить размеры набора данных в файле hdf5, используя rhdf5 в R?
Я пытаюсь обновить 7 наборов данных в одной группе в файле hdf5, но обновленные наборы данных имеют размеры, отличающиеся от размеров оригиналов (но с одинаковой размерностью, т.е. 1D, 2D и 3D). Есть ли способ изменить свойство измерения, чтобы обновить набор данных? Или я могу удалить предыдущую группу, а затем создать новую группу на ее месте? Я бы предпочел не перестраивать весь файл h5 (создание файла, создание групп, создание наборов данных), поскольку он достаточно сложный.
Я использую Биокондуктор rhdf5
пакет в R.
Пример данных:
# load package from bioconductor
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")
library(rhdf5)
# create new h5 file and populate
created = h5createFile('example.h5')
created = h5createGroup('example.h5','foo')
h5write(matrix(1:10, nr=5, nc=2), 'example.h5', 'foo/A')
# updating dataset with data of same dimension is successful
h5write(matrix(11:20, nr= 5, nc = 2), 'example.h5', 'foo/A')
# updating dataset with data of different dimension fails
h5write(matrix(1:12, nr= 6, nc = 2), 'example.h5', 'foo/A')
Примечание: в прошлом я читал данные из файлов hdf5, но я впервые записываю данные обратно в файл, так что, возможно, это наивное ожидание.
2 ответа
К сожалению, максимальный размер набора данных HDF5 фиксирован при его создании и впоследствии не может быть увеличен. Вам придется воссоздать по крайней мере наборы данных, которые вы хотите расширить.
HDF5 позволяет вам "удалять" набор данных, но для этого требуется только отсоединить его, то есть он становится недоступным, но пространство не освобождается. rhdf5
не похоже, чтобы обеспечить интерфейс к этому, однако. Кто-то более знаком с rhdf5
может быть в состоянии помочь вам там.
Вы можете установить максимальный размер в rhdf5
с
h5createDataset('example.h5', 'foo/A', c(10), maxdims=c(12))
из справочного руководства rhdf5 (PDF). Если вам нужны неограниченные максимальные значения, это немного сложнее: сначала вы должны создать пространство данных, используя константы HDF5, и использовать его для создания набора данных.
Обратите внимание, что если вы хотите изменить набор данных на меньший, то это возможно. Вы можете использовать функцию "h5set_extent" начиная с версии 2.11.4. см документацию