Не удается записать файл hdf5: ошибка в H5Dcreate
Когда я пытаюсь написать 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 ответ
Я столкнулся с аналогичной проблемой при попытке сохранить вектор с ~ 1,1 миллиарда записей. Казалось, проблема связана с тем, что чанк сжатия слишком велик, размер чанка по умолчанию - это размеры сохраняемого набора данных. Исправление, которое работало для меня, состояло в том, чтобы сначала создать набор данных и установить чанк на что-то меньшее. Вы можете увидеть, работает ли что-то вроде следующего:
h5createDataset(file, 'rawcounts', c(30000, 80000), chunk = c(1000, 1000))
h5writeDataset(as.matrix(dge_cut), file, 'rawcounts')
Вероятно, это не тот случай, когда 1000 x 1000 - лучший размер куска, но это место для начала.