Как сравнить Rpy2, pyrserve и PypeR?
Я хотел бы получить доступ к R из программы на Python. Я знаю о Rpy2, pyrserve и PypeR.
Какие преимущества или недостатки этих трех вариантов?
4 ответа:
Я знаю один из 3 лучше, чем другие, но в порядке, указанном в вопросе:
rpy2:
- интерфейс C-уровня между Python и R (R работает как встроенный процесс)
- R объекты, подверженные Python без необходимости копировать данные через
- и наоборот, массивы numpy Python могут быть открыты для R без создания копии
- низкоуровневый интерфейс (близко к R C-API) и высокоуровневый интерфейс (для удобство)
- модификация на месте для векторов и массивов возможна
- функции обратного вызова R могут быть реализованы в Python
- возможно иметь анонимные объекты R с меткой Python
- возможно маринование питона
- полная настройка поведения R с его консолью (так можно реализовать полный R GUI)
- MSWindows с ограниченной поддержкой
pyrserve:
- собственный код Python (will / should / may работать с CPython, Jython, IronPython)
- используйте Rserve R
- преимущества и неудобства, связанные с удаленными вычислениями и RServe
pyper:
- собственный код Python (будет/должен / может работать с CPython, Jython, IronPython)
- использование труб для связи Python с R (с преимуществами и неудобствами, связанными с ним)
edit: поддержка Windows rpy2
из газеты в журнал статистического программного обеспечения на PypeR:
RPy представляет собой простой и эффективный способ доступа к R из Python. Это надежный и очень удобно для частых операций взаимодействия между Python и R. Этот пакет позволяет Программы Python для передачи объектов Python основных типов данных в функции R и возврата результаты в объекты Python. Такие особенности делают его привлекательным решением для случаев, в которых Python и Р часто взаимодействуют. Тем не менее, есть еще ограничения этого пакета, как указано ниже.
Производительность:
RPy может вести себя не очень хорошо для больших наборов данных или для интенсивных вычислений обязанности. Много времени и памяти неизбежно потребляется при создании Python копия данных R, потому что в каждом раунде разговора RPy преобразует возвращаемые данные значение выражения R в объект Python базовых типов или массив NumPy. RPy2, a недавно созданное отделение 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 (Portable Operating System Interface for Unix) системы и R должны быть скомпилированы с включенной общей библиотекой. Кроме того, двоичный файл дистрибутивы для Windows привязаны к определенным комбинациям различных версий Python/ R, поэтому довольно часто у пользователя возникают трудности с поиском дистрибутива, который ts программная среда пользователя.
в pyper я не могу передать большую матрицу из python в экземпляр r с помощью assign(). однако, у меня нет проблем с rpy2. это просто мой опыт.
с точки зрения разработчика, мы использовали rpy / rpy2 для предоставления статистических и графических функций нашему приложению на основе Python. Это вызвало огромные проблемы в доставке нашего приложения, потому что rpy/rpy2 должен быть скомпилирован для определенных комбинаций Python и R, что делает невозможным для нас предоставлять двоичные дистрибутивы, которые работают из коробки, если мы не связываем R также. Поскольку rpy/rpy2 не особенно просты в установке, мы в конечном итоге заменили соответствующие детали собственные модули Python, такие как matplotlib. Мы бы переключились на pyrserve, если бы нам пришлось использовать R, потому что мы могли бы запустить сервер R локально и подключиться к нему, не беспокоясь о версии R.