В этом конкретном файле есть один объект, 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
octave
может быть быстрым обходным решением, на которое стоит обратить внимание. - person Matt Bannert   schedule 31.10.2011