以下代码应该创建一个热图在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.热图预计"一个数字的矩阵"。我怎样转换np。阵列,所需数据的类型?

有帮助吗?

解决方案

您需要添加

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

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

  

单独即进口足以   开关的自动转换   numpy的对象到对象rpy2

     

为什么使这是一个可选的进口,   虽然它可能已被列入   功能py2ri()(如完成   提交该原始补丁   功能)?

     

虽然两者都是有效的和合理   选择,设计作出决定   为了从numpy的分离rpy2   最多,不要以为   具有自动安装numpy的   意味着程序员想用   它

修改 随着rpy2系列2.2.x的,单独的进口不再是足够的。转换需要被明确地激活。

其他提示

有关rpy2 2.2.4我不得不添加:

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

对我来说(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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top