Преобразование Python возражает для rpy2

Следующий код, как предполагается, создает heatmap в rpy2

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

Однако это приводит к следующей ошибке

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.

Из документации я узнаю, что r.heatmap ожидает "числовую матрицу". Как я преобразовываю np.array в необходимый тип данных?

26
задан Boris Gorelik 4 June 2012 в 19:10
поделиться

1 ответ

Вам необходимо добавить

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

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

Одного этого импорта достаточно, чтобы переключить автоматическое преобразование объектов numpy в объекты rpy2.

Зачем делать это необязательным импортом, хотя его можно было бы включить в функцию py2ri () (как это сделано в исходном патче, представленном для этого {{1} }} function)?

Хотя оба варианта являются допустимыми и разумными , проектное решение было принято для того, чтобы максимально отделить rpy2 от numpy и не предполагать что автоматическая установка numpy означает, что программист хочет использовать его.

редактировать: С rpy2 series 2.2.x одного импорта уже недостаточно. Преобразование необходимо активировать явно.

38
ответ дан 28 November 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: