R: Помогите прочитать конкретный файл .mat в R - PullRequest
5 голосов
/ 31 октября 2011

Итак, я пытался прочитать этот конкретный файл .mat в R. Я не знаю слишком много о matlab, но я знаю достаточно, чтобы пакет R.matlab мог только читать несжатые данные в R и сохранятькак несжатый, мне нужно сохранить его как таковой в Matlab, используя save new.mat -v6.

Хорошо, я так и сделал, но когда я использовал readMat("new.mat") в R, он просто застрял при загрузке.Я также пытался использовать пакет hdf5 через:

> hdf5load("new.mat", load=FALSE)->g
Error in hdf5load("new.mat", load = FALSE) : 
  can't handle hdf type 201331051

Я не уверен, что это может быть за проблема, но если кто-то хочет попытаться выяснить это, файл расположен в http://dibernardo.tigem.it/MANTRA/MANTRA_online/Matlab_Code%26Data.html иназывается инвентаризация.мат (первый файл).

Спасибо за помощь!

Ответы [ 2 ]

4 голосов
/ 31 октября 2011

Этот конкретный файл имеет один объект, inventory, который является struct объектом, с множеством различных вещей внутри него. Некоторые из них являются массивами ячеек, другие являются векторами чисел типа double или логики, а пара - это матрицы чисел типа double. Похоже, R.matlab не любит массивы ячеек в структурах, но я не уверен, что вызывает проблемы для R, чтобы загрузить это. По этим причинам я бы вообще рекомендовал избегать отображения структур в Matlab на объекты в R. Он похож на список, и этот можно преобразовать в список, но это не всегда хорошая идея.

Я рекомендую создать новый файл, по одному для каждого объекта, например, ids = inventory.instance_ids и сохраните каждый объект в отдельный файл .mat или сохраните все из них, кроме объекта инвентаризации, в 1 файл. Еще лучше перейти к тексту, например, через csvwrite, чтобы вы могли видеть, что создается.

Я понимаю, что это связано с использованием считывателя Matlab to R, но наличие вещей в общем, универсальном формате гораздо более полезно для воспроизводимости, чем приобретение группы различных считывателей для закрытого формата.

В качестве альтернативы вы можете передавать объекты в память через R.matlab или этот набор функций + интерфейс R / DCOM (в Windows).

Хотя это не относится к использованию R.matlab, я провел много передач данных между R и Matlab в обоих направлениях, и я считаю, что лучше избегать файлов .mat (и, аналогично, файлы .rdat). Мне нравится передавать объекты в память, чтобы я мог осмотреть их с каждой стороны или через стандартные текстовые файлы. Работа с форматами файлов для конкретных приложений, особенно с теми, которые меняются немного и неэффективны (я смотрю на вас, MathWorks), не является хорошим расходом времени. Я ценю людей, которые работают с читателями, но гораздо больше контроля над структурами данных, используемыми в целевом языке, стоит очень много места при использовании простого формата выходного файла. Передача данных в памяти очень удобна, потому что вы можете взаимодействовать с программами, но это может отвлекать, если ваша единственная цель - перемещать данные.

2 голосов
/ 31 октября 2011

Вы запускали примеры в http://cran.r -project.org / web / packages / R.matlab / R.matlab.pdf на страницах с 22 по 24?Это проверит вашу способность читать из версий 4 и 5. Я не уверен, что R не может читать сжатые файлы.В Омегахате есть пакет Rcompresssion.

...