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, поэтому у пользователя довольно часто возникают трудности с поиском дистрибутива, который соответствует его программной среде.