Python llama a la programación R——rpy2
La forma más común de llamar a R en Python es utilizar el módulo rpy2.
El paquete está compuesto por varios subpaquetes o módulos:
La importación de paquetes de R suele ser el primer paso cuando se ejecuta código R, y rpy2 proporciona una función rpy2.robjects.packages .importr() que hace que ese paso sea muy similar a importar paquetes de Python.
Mencionamos anteriormente que rpy2 ejecuta un R integrado. Esto puede ser un poco abstracto, por lo que hay un objeto rpy2.robjects. r para hacerlo tangible
El método __getitem__() de rpy2.robjects.r obtiene el objeto R asociado con un símbolo dado
El objeto r también es invocable y el la cadena pasada en una llamada se evalúa como código R.
Un objeto R tiene una representación de cadena que se puede usar directamente en el código R para ser evaluado.
En R, la mayoría de los datos son. representado por vectores, incluso cuando parecen escalares. Al observar de cerca el objeto R pi usado anteriormente, podemos observar que este es de hecho un vector de longitud 1.
La creación de R vectores se puede lograr de manera simple.
La forma más sencilla de crear este tipo de objetos es hacerlo a través de funciones de R
Llamar a funciones de R es decepcionantemente similar a llamar a funciones de Python
De forma predeterminada, llamar a funciones R devuelve objetos R
Modelos lineales
Crear un vector o matriz R y llenar sus celdas usando código Python
Este módulo debería ser el correcto. elegir para uso casual y general
Su objetivo es abstraer algunos de los detalles y proporcionar una interfaz intuitiva para los programadores de Python y R.
La instancia puede verse como el punto de entrada a un proceso de R integrado. desde un entorno R equivalente son accesibles como atributos de la instancia
Cuando la seguridad es más importante, recomendamos usar __getitem__() para obtener un objeto R determinado
Almacenar el objeto en un. La variable Python lo protegerá de la recolección de basura, incluso si se elimina de los objetos visibles para un usuario de R.
Al igual que en el caso de RPy-1.x, evaluación sobre la marcha del código R. contenido en una cadena se puede realizar llamando a la instancia r
El lector astuto se dará cuenta rápidamente de que los objetos R nombrados por variables de Python se pueden conectar al código a través de su representación R
. Los entornos R pueden describirse para el usuario de Python como un híbrido de un diccionario y un alcance
El primero de todos los entornos se llama Entorno Global, al que también se le puede denominar espacio de trabajo R
p>
Asignar un valor a un símbolo en un entorno se ha hecho tan simple como asignar un valor a una clave en un diccionario de Python
Un entorno también es iterable. , devolviendo todos los símbolos (claves) que contiene.
Se pueden usar las funciones R expuestas por la interfaz de alto nivel de rpy2:
Todo esto se ve bien y
simple hasta que se encuentren argumentos de R con nombres como na.rm. De forma predeterminada, esto se soluciona teniendo una traducción de '.' (punto) en el nombre del argumento de R a '_' en el nombre del argumento de Python. >
En Python se puede escribir:
R es capaz de realizar introspección y puede devolver los argumentos aceptados por una función a través de la función formals()
El método Function. rcall() es una forma alternativa de llamar a una función R subyacente
Para tareas como modelar y trazar, una fórmula R puede ser una forma concisa, pero legible, de expresar lo que se desea
La clase robjects.Formula representa una fórmula de R
Otras opciones son:
Esto se logra mediante la biblioteca de funciones de R() y require() (adjuntando el archivo). espacio de nombres del paquete a la ruta de búsqueda de R).
Además de las funciones y entornos, la mayoría de los objetos con los que interactúa un usuario de R son de tipo vectorial. Por ejemplo, esto significa que cualquier escalar es de hecho un. vector de longitud uno.
La clase Vector tiene un constructor:
La creación de vectores se puede lograr desde R o desde Python
Cuando se crean los vectores. de R, uno no debe preocuparse mucho ya que rpy2.robjects los expondrá como debería.
Cuando uno quiere crear un vector desde Python, ya sea la clase Vector o las clases de conveniencia IntVector, FloatVector, BoolVector, StrVector puede ser u
sed.
Extracción al estilo Python
El método __getitem__() de Python se comporta como lo esperaría un usuario de Python para un vector (y la indexación comienza en cero
).Extracción, estilo R
El acceso a la extracción/subconjunto de estilo R se otorga a través de los dos delegadores rx y rx2, que representan las funciones R [ y [[ respectivamente
. Asignación al estilo Python
Dado que los vectores se exponen como secuencias mutables de Python, la asignación funciona como para las listas normales de Python
En R, los vectores se pueden nombrar, es decir, los elementos del vector. tiene un nombre
Asignación, estilo R
Los atributos rx y rx2 utilizados anteriormente se pueden volver a utilizar:
En aras de la completa compatibilidad con R. , los argumentos se pueden nombrar (y pasar como dict o rpy2.rlike.container.TaggedList
En S/Splus/R se pueden usar valores NA especiales en un vector de datos para indicar ese hecho). y rpy2.robjects crea alias para aquellos disponibles como objetos de datos NA_Logical, NA_Real, NA_Integer, NA_Character, NA_Complex
Para exponer eso a Python, se proporciona un atributo de delegación ro para objetos tipo vector
Los vectores R pueden tener un nombre dado a todos o algunos de los elementos. Los nombres de las propiedades se pueden usar para obtener o establecer esos nombres.
Matriz
. En R, las matrices son simplemente vectores con un atributo de dimensión. Ese hecho se reflejó en la jerarquía de clases.
chy con robjects.Array heredando de robjects.Vector.
Matrix
Una Matrix es un caso especial de Array. Al igual que con las matrices, hay que recordar que esto es solo un vector. con atributos de dimensión (número de filas, número de columnas).
DataFrame
En rpy2.robjects, DataFrame representa el data.frame de clase R
Creando. un DataFrame se puede hacer mediante:
El constructor DataFrame acepta un rinterface.SexpVector (con tipo de igual a VECSXP, es decir, una lista R) o cualquier objeto Python que implemente el método items() (por ejemplo dict o rpy2.rlike.container.OrdDict).
Para crear un DataFrame y estar seguro del orden de las columnas, se puede utilizar un diccionario ordenado:
Aquí nuevamente, __getitem__( de Python). ) funcionará como un programador de Python esperará:
El DataFrame se compone de columnas seguidas, y cada columna puede ser de un tipo diferente:
El enfoque en rpy2 tiene 2 niveles (rinterfaz y objetos) y las funciones de conversión ayudan a moverse entre ellos.
Los vectores R se asignan a objetos Python implementando los métodos __getitem__() / __setitem__() en el protocolo de secuencia para que se pueda acceder fácilmente a los elementos.
Las funciones de R se asignan a objetos de Python que implementan __call__() para que puedan llamarse como si fueran funciones.
Los entornos de R se asignan a objetos de Python.
cts implementa __getitem__() / __setitem__() en el protocolo de mapeo para que se pueda acceder a los elementos de manera similar a un dict de Python.
En su interfaz de alto nivel, rpy2 utiliza un sistema de conversión que tiene la tarea de conversión. objetos entre las siguientes 3 representaciones: - interfaz de nivel inferior para R (nivel rpy2.rinterface), - interfaz de nivel superior para R (nivel rpy2.robjects) - otras representaciones (no rpy2)
Vectores de R o los arrays se pueden convertir en arrays numpy usando numpy.array() o numpy.asarray()
La activación (y desactivación) de la conversión automática de objetos numpy en objetos rpy2 se puede realizar con:<. /p>