Совместное использование больших наборов данных между Matlab и R

Мне нужен относительно эффективный способ обмена данными между Matlab и R.

Я проверил СохранитьR и MATLAB R-link, но СохранитьR форматы Битовые данные Matlab как текстовые строки, а затем печатает их в файл ASCII, что неэффективно для больших наборов данных, а MATLAB R-link работает только в Windows (он использует интерфейс на основе COM).

Обновление:

Dirk опубликовал список наилучших решений этой проблемы, чем SaveR и Matlab R-link. Недавно я узнал о RAM-диски (см. здесь и здесь для некоторых примеров реализации), и подумал, что они могут облегчить задачу совместного использования больших наборов данных между Matlab и R (или аналогичными вычислительными средами). Это приводит меня к следующим вопросам:

Предполагая, что данные вписываются в память машин в контейнерах данных Matlab или R:

  • Являются ли какие-либо из перечисленных решений гораздо лучше подходит для RAM-дисков?

  • Есть ли дополнительные соображения, которые необходимо принять учет при работе с RAM-дисками вместо хранилища решения?

Спасибо!

Ответы

Ответ 1

Пара идей, и с оговоркой, что я знаю больше о стороне R вещей:

  • Пакет R.matlab в CRAN может помочь: этот пакет предоставляет методы для чтения и записи файлов MAT. Это также позволяет связывать (оценивать код, отправлять и извлекать объекты и т.д.) С помощью Matlab v6 или выше, работающего локально или на удаленном хосте.

  • HDF5, как вы предположили, это возможность, но я слышал, что поддержка R в пакете CRAN hdf5 является несколько базовым

  • NetCDF может быть альтернативой; CRAN имеет пакеты RNetCDF, ncdf и ncdf4

  • Используйте базу данных, особенно легкую и основанную на файлах, такую ​​как SQLite или H4, у которых есть поддержка R

  • Использовать общий формат сериализации/де-сериализации; R поддерживает буфери Google Protocol через RProtoBuf, а Google указывает на protobuf-matlab для Matlab

  • Напишите свой собственный! Особенно, когда вам нужно только что-то основное, как большие прямоугольные матрицы, тогда ничто не будет бить прямую двоичную запись; Я сделал это несколько лет назад для Octave (что близко к Matlab). Вы можете расширить Matab через mex файлы; R имеет API и помощники, такие как Rcpp. Чем больше ваших наборов данных, тем более привлекательным может показаться, что вы сохраняете конверсии.

Ответ 2

Matlab использует HDF5 изначально в последних версиях ( "сохранить" и "загрузить" ). Существует package для R. Тогда HDF5 может быть хорошим решением.