Pregunta

Se supone que el siguiente código para crear 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, el resultado es 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.

A partir de la documentación me entero de que r.heatmap espera "una matriz numérica". ¿Cómo convierto np.array al tipo de datos requerido?

¿Fue útil?

Solución

Es necesario añadir

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

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

  

Eso importación solo es suficiente para   cambiar una conversión automática de   numpy objetos en objetos rpy2.

     

¿Por qué hacer esto una importación opcional,   mientras que podría haber sido incluido en   la py2ri función () (como se hace en el   parche original presentada a tal   función)?

     

A pesar de que ambos son válidos y razonables   opciones, se tomó la decisión de diseño   con el fin de desacoplar rpy2 de numpy   la mayoría, y no asuma que   habiendo numpy instala automáticamente   significaba que un programador quería utilizar   a él.

editar Con la serie 2.2.x rpy2, la importación sola ya no es suficiente. La conversión necesita ser activado de forma explícita.

Otros consejos

Para rpy2 2.2.4 he tenido que añadir:

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

Para mí (2.2.1) lo siguiente también trabajó (como se documenta en la http://rpy.sourceforge.net/rpy2/doc-2.2/html/numpy.html ):

import rpy2.robjects as ro
from rpy2.robjects.numpy2ri import numpy2ri
ro.conversion.py2ri = numpy2ri
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top