Совместное использование больших наборов данных между Matlab и R - PullRequest
15 голосов
/ 23 января 2011

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

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

Обновление:

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

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

  1. Любое из перечисленных решений куда лучше подойдет для RAM дисков?

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

Спасибо!

Ответы [ 2 ]

17 голосов
/ 23 января 2011

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

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

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

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

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

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

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

1 голос
/ 23 января 2011

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

...