Pergunta

O código a seguir deve criar um mapa de calor no RPY2

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

No entanto, resulta no seguinte erro

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.

Com a documentação, aprendi que a R.Heatmap espera "uma matriz numérica". Como convertido np.array para o tipo de dados necessário?

Foi útil?

Solução

Você precisa adicionar

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

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

Essa importação por si só é suficiente para alternar uma conversão automática de objetos Numpy em objetos RPY2.

Por que tornar isso uma importação opcional, embora pudesse ter sido incluída na função py2ri () (como feito no patch original enviado para essa função)?

Embora ambos sejam opções válidas e razoáveis, a decisão de design foi tomada para dissipar o RPY2 da Numpy mais e não assumirá que ter o Numpy instalado automaticamente significava que um programador queria usá -lo.

editar:Com a série RPY2 2.2.x, a importação por si só não é mais suficiente. A conversão precisa ser explicitamente ativada.

Outras dicas

Para RPY2 2.2.4 Eu tive que acrescentar:

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

Para mim (2.2.1) o seguinte também funcionou (conforme documentado em 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top