为rpy2转换python对象

时间:2010-03-15 13:35:45

标签: python r rpy2

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

3 个答案:

答案 0 :(得分:36)

您需要添加

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

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

  

单独进口就足够了   切换自动转换   将numpy对象转换为rpy2对象。

     

为什么要将它作为可选导入,   虽然它本来可以包括在内   函数py2ri()(就像在   提交的原始补丁   功能)?

     

虽然两者都有效且合理   选项,设计决定   为了将rpy2从numpy中分离出来   最多的,不要假设   自动安装numpy   意味着程序员想要使用   它

修改 使用rpy2系列2.2.x,单独导入已经不够了。需要明确激活转换。

答案 1 :(得分:10)

对于rpy2 2.2.4,我必须添加:

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

答案 2 :(得分:1)

对于我(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