R: Помогите прочитать конкретный файл .mat в R

Итак, я пытался прочитать этот конкретный файл .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&Data.html и называется inventory.mat (первый файл).

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


person JoshDG    schedule 31.10.2011    source источник
comment
Я тоже мало знаю о Matlab, но недавно повеселился с его открытой альтернативой под названием octave. Если вам не нужен импорт на регулярной основе, octave может быть быстрым обходным решением, на которое стоит обратить внимание.   -  person Matt Bannert    schedule 31.10.2011
comment
R.matlab может читать сжатые данные. Я счел необходимым уменьшить размер буфера для некоторых больших файлов, когда я уже знал правильное соотношение, но это не предусмотрено интерфейсом.   -  person mdsumner    schedule 01.11.2011


Ответы (2)


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

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

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

Кроме того, вы можете передавать объекты в память с помощью R.matlab или этого набора функций + R Интерфейс /DCOM (в Windows).

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

person Iterator    schedule 31.10.2011
comment
Согласен, что писать в текстовом формате - хорошая идея. Таким образом, когда возникают проблемы, вы можете проверить содержимое файла. Передача -ascii в функцию MATLAB save была бы хорошим началом. - person Richie Cotton; 01.11.2011

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

person IRTFM    schedule 31.10.2011