Frage

Der folgende Code sollte eine Heatmap in rpy2 erstellen

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

Allerdings führt es in dem folgenden Fehler

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.

Aus der Dokumentation erfahre ich, dass r.heatmap erwartet „eine numerische Matrix“. Wie kann ich np.array auf den gewünschten Datentyp umwandeln?

War es hilfreich?

Lösung

Sie müssen hinzufügen

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

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

  

Das Import allein reicht aus, um   Schalter eine automatische Umwandlung von   numpy Objekte in rpy2 Objekte.

     

Warum dies ein optionales Import machen,   während es aufgenommen worden sein könnte in   die Funktion py2ri () (wie in der getan   Original-Patch für die eingereicht   Funktion)?

     

Obwohl beide gültig sind und angemessen   Optionen wurden die Design-Entscheidung getroffen   um zu entkoppeln rpy2 von numpy   die meisten, und nicht davon ausgehen, dass   numpy nachdem automatisch installiert   bedeuten, dass ein Programmierer verwenden wollte   es.

Bearbeiten Mit der rpy2 Serie 2.2.x, ist der Import allein nicht mehr aus. Die Umwandlung Bedürfnisse explizit aktiviert werden.

Andere Tipps

Für rpy2 2.2.4 musste ich hinzufügen:

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

Für mich (2.2.1) die folgenden auch gearbeitet (wie dokumentiert auf 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top