30

以下代码应该在 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 转换为所需的数据类型?

4

3 回答 3

43

您需要添加

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

在 rpy2 文档numpy 部分查看更多信息(这里是旧的 2.x 版本)

在 2.2.x 之前,仅导入就足够了。

仅此导入就足以将 numpy 对象自动转换为 rpy2 对象。

为什么让它成为一个可选的导入,而它本来可以包含在函数 py2ri() 中(就像在为该函数提交的原始补丁中所做的那样)?

尽管两者都是有效且合理的选择,但设计决策是为了最大程度地将 rpy2 与 numpy 分离,并且不要假设自动安装 numpy 意味着程序员想要使用它。

于 2010-03-15T13:38:19.183 回答
11

对于 rpy2 2.2.4,我必须添加:

import rpy2.robjects.numpy2ri
rpy2.robjects.numpy2ri.activate()
于 2011-11-24T18:29:13.563 回答
2

对我(2.2.1)来说,以下内容也有效(如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
于 2012-06-04T15:42:47.780 回答