Как сравнить Rpy2, pyrserve и PypeR? - PullRequest
56 голосов
/ 12 апреля 2011

Я хотел бы получить доступ к R из программы Python. Мне известны Rpy2, pyrserve и PypeR.

Каковы преимущества или недостатки этих трех вариантов?

Ответы [ 4 ]

36 голосов
/ 13 апреля 2011

Я знаю одну из 3 лучше, чем остальные, но в порядке, указанном в вопросе:

rpy2:

  • Интерфейс уровня C между Python и R (Rвыполняется как встроенный процесс)
  • R объектов, доступных в Python без необходимости копировать данные поверх
  • И наоборот, массивы Python могут быть представлены в R без копирования
  • Низкоуровневый интерфейс (близкий к R C-API) и высокоуровневый интерфейс (для удобства)
  • Возможна модификация на месте для векторов и массивов
  • Могут быть реализованы функции обратного вызовав Python
  • Возможно иметь анонимные объекты R с меткой Python
  • Возможно выделение Python
  • Полная настройка поведения R с помощью его консоли (так что можно реализовать полный R GUI))
  • MSWindows с ограниченной поддержкой

pyrserve:

  • нативный код Python (будет / должен / может работать с CPython, Jython, IronPython)
  • используйте R's Rserve
  • преимущества и неудобства, связанные с удаленными вычислениями и RServe

pyper:

  • собственный код Python (будет / должен / может работать с CPython, Jython,IronPython)
  • использование каналов для связи Python с R (с преимуществами и неудобствами, связанными с ним)

edit: Поддержка Windows для rpy2

16 голосов
/ 12 апреля 2011

Из статьи в журнале статистического программного обеспечения на PypeR :

RPy представляет простой и эффективный способ доступа к R из Python.Он надежен и очень удобен для частых операций взаимодействия между Python и R. Этот пакет позволяет программам Python передавать объекты Python базовых типов данных в функции R и возвращать результаты в объектах Python.Такие особенности делают его привлекательным решением для случаев, когда Python и R часто взаимодействуют.Тем не менее, существуют ограничения этого пакета, перечисленные ниже.
Производительность:
RPy может работать не очень хорошо для больших массивов данных или для сложных вычислительных задач.Много времени и памяти неизбежно расходуются при создании копии данных R на языке Python, поскольку RPy в каждом раунде диалога преобразует возвращаемое значение выражения R в объект Python базовых типов или массив NumPy.RPy2, недавно разработанная ветвь RPy, использует объекты Python для ссылки на объекты R вместо того, чтобы копировать их обратно в объекты Python.Эта стратегия позволяет избежать частых преобразований данных и повышает скорость.Тем не менее, потребление памяти остается проблемой.[...] Когда мы внедряли WebArray (Xia et al. 2005), онлайн-платформу для анализа микрочипов, задание потребляло примерно на четверть больше вычислительного времени при запуске R через RPy, а не через пользовательский интерфейс командной строки R.Поэтому мы решили запустить R в Python через каналы в последующих разработках, например, WebArrayDB (Xia et al. 2009), которые сохранили ту же производительность, что и при независимом запуске R.Мы не знаем точной причины такой разницы в производительности, но мы заметили, что RPy напрямую использует совместно используемую библиотеку R для запуска сценариев R.Напротив, запуск R через каналы означает непосредственный запуск интерпретатора R.
Память:
R осужден за неэкономичное использование памяти.Память, используемая объектами R большого размера, редко удаляется после удаления этих объектов.Иногда единственный способ освободить память из R - это выйти из R. Модуль RPy оборачивает R в объект Python.Однако библиотека R останется в памяти, даже если объект Python будет удален.Другими словами, память, используемая R, не может быть освобождена до тех пор, пока не завершится сценарий Python на хосте.
Переносимость:
Поскольку модуль с расширениями, написанными на C, исходный пакет RPy должен быть скомпилирован с определенной версией R наPOSIX (Переносимый интерфейс операционной системы для Unix), и R должен быть скомпилирован с включенной общей библиотекой.Кроме того, двоичные дистрибутивы для Windows связаны с определенными комбинациями различных версий Python / R, поэтому у пользователя довольно часто возникают трудности с поиском дистрибутива, который соответствует его программной среде.

4 голосов
/ 11 марта 2015

С точки зрения разработчика, мы использовали rpy / rpy2 для предоставления статистических функций и функций рисования для нашего приложения на основе Python. Это вызвало огромные проблемы с доставкой нашего приложения, потому что rpy / rpy2 должен быть скомпилирован для конкретных комбинаций Python и R, что делает невозможным предоставление бинарных дистрибутивов, которые работают «из коробки», если только мы не объединяем R. Поскольку rpy / rpy2 не особенно просты в установке, мы закончили замену соответствующих частей собственными модулями Python, такими как matplotlib. Мы бы переключились на pyrserve, если бы нам пришлось использовать R, потому что мы могли бы запустить R-сервер локально и подключиться к нему, не беспокоясь о версии R.

4 голосов
/ 30 ноября 2012

в pyper, я не могу передать большую матрицу из python в r с помощью assign ()Тем не менее, у меня нет проблем с rpy2.это просто мой опыт.

...