python r rpy2 pyrserve pyper

python - ¿Cómo se comparan Rpy2, pyrserve y PypeR?



(4)

Me gustaría acceder a R desde un programa Python. Soy consciente de Rpy2, pyrserve y PypeR.

¿Cuáles son las ventajas o desventajas de estas tres opciones?


Conozco a uno de los 3 mejores que a los otros, pero en el orden dado en la pregunta:

rpy2:

  • Interfaz de nivel C entre Python y R (R ejecutándose como un proceso integrado)
  • Objetos R expuestos a Python sin necesidad de copiar los datos
  • Por el contrario, las matrices numpy de Python pueden exponerse a R sin hacer una copia
  • Interfaz de bajo nivel (cerca de la R C-API) e interfaz de alto nivel (para mayor comodidad)
  • Modificación in situ para vectores y matrices posibles
  • R funciones de devolución de llamada se pueden implementar en Python
  • Posible tener objetos R anónimos con una etiqueta de Python
  • Python decapado posible
  • Personalización completa del comportamiento de R con su consola (por lo que es posible implementar una GUI de R completa)
  • MSWindows con soporte limitado

pyrserve

  • código Python nativo (will / should / puede trabajar con CPython, Jython, IronPython)
  • usar Rserve de R
  • Ventajas e inconvenientes vinculados a la computación remota y al RServe.

pyper

  • código Python nativo (will / should / puede trabajar con CPython, Jython, IronPython)
  • uso de tuberías para que Python se comunique con R (con las ventajas e inconvenientes relacionados)

edición: soporte de Windows para rpy2


Del artículo en el Journal of Statistical Software en PypeR :

RPy presenta una forma simple y eficiente de acceder a R desde Python. Es robusto y muy conveniente para las operaciones de interacción frecuentes entre Python y R. Este paquete permite que los programas de Python pasen objetos Python de tipos de datos básicos a funciones R y devuelvan los resultados en objetos Python. Estas características lo convierten en una solución atractiva para los casos en los que Python y R interactúan con frecuencia. Sin embargo, todavía hay limitaciones de este paquete como se indica a continuación.
Actuación:
RPy puede no comportarse muy bien para conjuntos de datos de gran tamaño o para tareas de computación intensivas. Se consume una gran cantidad de tiempo y memoria al producir la copia Python de los datos R porque en cada ronda de una conversación RPy convierte el valor devuelto de una expresión R en un objeto Python de tipos básicos o matriz NumPy. RPy2, una rama desarrollada recientemente de RPy, utiliza objetos de Python para referirse a objetos R en lugar de copiarlos de nuevo en objetos de Python. Esta estrategia evita conversiones de datos frecuentes y mejora la velocidad. Sin embargo, el consumo de memoria sigue siendo un problema. [...] Cuando estábamos implementando WebArray (Xia et al. 2005), una plataforma en línea para el análisis de datos de micromatrices, un trabajo consumía aproximadamente un cuarto de tiempo computacional más si se ejecutaba R a través de RPy en lugar de a través de la interfaz de usuario de la línea de comandos de R. Por lo tanto, decidimos ejecutar R en Python a través de tuberías en desarrollos posteriores, por ejemplo, WebArrayDB (Xia et al. 2009), que mantuvo el mismo rendimiento que se logró al ejecutar R de forma independiente. No conocemos la razón exacta de tal diferencia en el rendimiento, pero nos dimos cuenta de que RPy utiliza directamente la biblioteca compartida de R para ejecutar los scripts de R. En contraste, ejecutar R a través de tuberías significa ejecutar el intérprete R directamente.
Memoria:
R ha sido denunciado por su uso antieconómico de la memoria. La memoria utilizada por los objetos R de gran tamaño rara vez se libera después de eliminar estos objetos. A veces, la única forma de liberar memoria de R es salir del módulo R. RPy envuelve R en un objeto Python. Sin embargo, la biblioteca R permanecerá en la memoria incluso si se elimina el objeto de Python. En otras palabras, la memoria utilizada por R no puede liberarse hasta que finalice la secuencia de comandos de Python del host.
Portabilidad:
Como módulo con extensiones escritas en C, el paquete fuente RPy debe compilarse con una versión R específica en los sistemas POSIX (Interfaz del sistema operativo portátil para Unix), y la R debe compilarse con la biblioteca compartida habilitada. Además, las distribuciones binarias para Windows están vinculadas a combinaciones específicas de diferentes versiones de Python / R, por lo que es bastante frecuente que un usuario tenga dificultades para encontrar una distribución que se adapte al entorno de software del usuario.


Desde la perspectiva de un desarrollador, solíamos utilizar rpy / rpy2 para proporcionar funciones estadísticas y de dibujo a nuestra aplicación basada en Python. Ha causado grandes problemas en la entrega de nuestra aplicación porque rpy / rpy2 necesita compilarse para combinaciones específicas de Python y R, lo que hace que sea imposible para nosotros proporcionar distribuciones binarias que funcionen de forma inmediata, a menos que también incluyamos R. Debido a que rpy / rpy2 no son particularmente fáciles de instalar, terminamos reemplazando partes relevantes con módulos Python nativos como matplotlib. Nos habríamos cambiado a pyrserve si tuviéramos que usar R porque podríamos iniciar un servidor R localmente y conectarnos sin preocuparnos por la versión de R.


en pyper, no puedo pasar una matriz grande de python a r instance con assign (). Sin embargo, no tengo problemas con rpy2. Es solo mi experiencia.