为rpy2转换python对象

问题描述 投票:28回答:3

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

python r rpy2
3个回答
41
投票

您需要添加

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

请参见rpy2文档numpy section中的更多内容(对于较早的2.x版本,为here

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

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

为什么将其设为可选导入, 虽然它可能已经包含在其中 函数py2ri()(如 为此提交的原始补丁 功能)?

尽管两者都是有效和合理的 选择,做出设计决定 为了从numpy解耦rpy2 最,不要假设 自动安装了numpy 意味着程序员想使用 它。


10
投票

对于rpy2 2.2.4,我必须添加:

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

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
© www.soinside.com 2019 - 2024. All rights reserved.