Pertanyaan Konversi objek python untuk rpy2


Kode berikut seharusnya membuat peta panas di rpy2

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

Namun, itu menghasilkan kesalahan berikut

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.

Dari dokumentasi saya belajar bahwa r.heatmap mengharapkan "matriks numerik". Bagaimana cara mengonversi np.array ke tipe data yang diperlukan?


26
2018-03-15 13:35


asal


Jawaban:


Anda perlu menambahkan

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

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

Impor saja sudah cukup untuk   beralih konversi otomatis   benda numpy menjadi objek rpy2.

Mengapa ini menjadikan impor opsional,   sementara itu bisa dimasukkan dalam   fungsi py2ri () (seperti yang dilakukan di   tambalan asli diajukan untuk itu   fungsi)?

Meskipun keduanya valid dan masuk akal   pilihan, keputusan desain diambil   untuk memisahkan rpy2 dari numpy   paling banyak, dan jangan menganggap itu   memiliki numpy diinstal secara otomatis   artinya seorang programmer ingin menggunakannya   saya t.

edit: Dengan rpy2 series 2.2.x, pengimporan saja tidak lagi cukup. Konversi harus diaktifkan secara eksplisit.


36
2018-03-15 13:38



Untuk rpy2 2.2.4 saya harus menambahkan:

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

10
2017-11-24 18:29



Bagi saya (2.2.1) yang berikut ini juga berhasil (seperti yang didokumentasikan pada 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

1
2018-06-04 15:42