Не удается записать файл hdf5: ошибка в H5Dcreate - PullRequest
0 голосов
/ 28 октября 2018

Когда я пытаюсь записать dgcMatrix из 30 000x80 000, используя rhdf5 в Rstudio:

h5writeDataset(as.matrix(dge_cut), file, 'rawcounts')

Я получаю сообщение об ошибке:

Ошибка в H5Dcreate (loc $ H5Identifier, набор данных, tid, sid, dcpl = dcpl): HDF5.Dataset.Невозможно инициализировать объект.Кроме того: Предупреждающее сообщение: В h5createDataset (h5loc, name, dim, storage.mode = storage.mode (obj),: вы создали большой набор данных со сжатием и разбиением. Размер порции равен размерам набора данных. Если вы хотитеЧтобы прочитать подмножества набора данных, вы должны протестировать меньшие размеры чанка, чтобы улучшить время чтения. Отключите это предупреждение с помощью showWarnings = FALSE. Ошибка в H5Dopen (h5loc, name): HDF5. Набор данных. Объект не найден. Ошибка в h5writeDatasetHelper (obj =obj, h5dataset = h5dataset, index = index,: объект 'h5dataset' не найден Ошибка в h5writeDatasetHelper (obj = obj, h5dataset = h5dataset, index = index,: объект 'h5dataset' не найден Дополнительно: предупреждающее сообщение: In is (h5id), "H5IdComponent"): перезапуск оценки прерванного обещания Ошибка в H5Dclose (h5dataset): объект 'h5dataset' не найден

Файл определенно существует и открыт.

sessionInfo():

R version 3.5.1 (2018-07-02)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.4

Я не понимаю, почему это происходит. Любые предложения будут с благодарностью.

1 Ответ

0 голосов
/ 27 ноября 2018

Я столкнулся с подобной проблемой при попытке сохранить вектор с ~ 1,1 миллиарда записей.Казалось, проблема связана с тем, что чанк сжатия слишком велик, размер чанка по умолчанию - это размеры сохраняемого набора данных.Исправление, которое работало для меня, состояло в том, чтобы сначала создать набор данных и установить чанк на что-то меньшее.Вы можете увидеть, работает ли что-то вроде следующего:

h5createDataset(file, 'rawcounts', c(30000, 80000), chunk = c(1000, 1000))
h5writeDataset(as.matrix(dge_cut), file, 'rawcounts')

Вероятно, не тот случай, когда 1000 x 1000 - лучший размер куска, но это место, с которого нужно начинать.

...