Domanda

Il seguente codice dovrebbe creare una mappa termica in rpy2

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

Tuttavia, il risultato e 'il seguente errore

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.

Dalla documentazione apprendo che r.heatmap si aspetta "una matrice numerica". Come faccio a convertire np.array al tipo di dati richiesti?

È stato utile?

Soluzione

È necessario aggiungere

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

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

  

Quello di importazione da sola è sufficiente per   attivare una conversione automatica di   NumPy oggetti in oggetti rpy2.

     

Perché fare questo un'importazione facoltativa,   mentre avrebbe potuto essere incluso nel   la funzione py2ri () (come fatto in   patch originale presentato per quello   funzione)?

     

Anche se entrambi sono valide e ragionevoli   opzioni, la decisione di progettazione è stata presa   per disaccoppiare rpy2 da numpy   di più, e non date per scontato che   avendo numpy installato automaticamente   ha fatto sì che un programmatore voleva usare   esso.

modifica Con la serie rpy2 2.2.x, l'importazione da sola non è più sufficiente. La conversione deve essere esplicitamente attivata.

Altri suggerimenti

Per rpy2 2.2.4 ho dovuto aggiungere:

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

Per me (2.2.1) seguito anche lavorato (come documentato su 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top