Подтвердить что ты не робот

Как сравнить Rpy2, pyrserve и PypeR?

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

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

4b9b3361

Ответ 1

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

rpy2:

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

pyrserve:

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

Пайпер:

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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