Question

Le code suivant est censé créer un heatmap dans rpy2

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

Cependant, il en résulte l'erreur suivante

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 documentation que j'apprends que r.heatmap attend « une matrice numérique ». Comment puis-je convertir np.array au type de données requises?

Était-ce utile?

La solution

Vous devez ajouter

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

Voir http://rpy.sourceforge.net/rpy2/doc -2,2 / html / numpy.html :

  

Cette importation seule est suffisante pour   commuter une conversion automatique de   numpy objets en objets rpy2.

     

Pourquoi en faire une importation en option,   alors qu'il aurait pu être inclus dans   la fonction py2ri () (comme cela se fait dans le   patch d'origine soumis à cette vérification   fonction)?

     

Bien que les deux sont valables et raisonnables   options, la décision de conception a été prise   pour découpler rpy2 de numpy   le plus, et ne présumez pas que   après avoir installé automatiquement numpy   signifie qu'un programmeur voulait utiliser   il.

modifier Avec la 2.2.x série rpy2, l'importation seule ne suffit plus. La conversion doit être explicitement activée.

Autres conseils

Pour rpy2 2.2.4 je devais ajouter:

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

Pour moi (2.2.1) ci-après ont aussi travaillé (comme indiqué sur 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top