for ejecutar desde python r rpy2

for - ejecutar r desde python



Convertir objetos python para rpy2 (3)

Necesitas agregar

import rpy2.robjects.numpy2ri rpy2.robjects.numpy2ri.activate()

Consulte http://rpy.sourceforge.net/rpy2/doc-2.2/html/numpy.html :

Esa importación por sí sola es suficiente para cambiar una conversión automática de objetos numpy en objetos rpy2.

¿Por qué hacer que esto sea una importación opcional, mientras que podría haberse incluido en la función py2ri () (como se hizo en el parche original enviado para esa función)?

Aunque ambas son opciones válidas y razonables, la decisión de diseño se tomó para desacoplar a rpy2 del número y no se supone que tener el número instalado automáticamente significaba que el programador quería usarlo.

edición: con la serie rpy2 2.2.x, la importación por sí sola ya no es suficiente. La conversión debe ser activada explícitamente.

Se supone que el siguiente código crea un mapa de calor en rpy2

import numpy as np from rpy2.robjects import r data = np.random.random((10,10)) r.heatmap(data)

Sin embargo, se traduce en el siguiente error

Traceback (most recent call last): File "z.py", line 8, in <module> labRow=rowNames, labCol=colNames) File "C:/Python25/lib/site-packages/rpy2/robjects/__init__.py", line 418, in __call__ new_args = [conversion.py2ri(a) for a in args] File "C:/Python25/lib/site-packages/rpy2/robjects/__init__.py", line 93, in default_py2ri raise(ValueError("Nothing can be done for the type %s at the moment." %(type(o)))) ValueError: Nothing can be done for the type <type ''numpy.ndarray''> at the moment.

De la documentación aprendí que r.heatmap espera "una matriz numérica". ¿Cómo convierto np.array al tipo de datos requerido?



Para rpy2 2.2.4 tuve que añadir:

import rpy2.robjects.numpy2ri rpy2.robjects.numpy2ri.activate()