题
以下代码应该创建一个热图在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
不隶属于 StackOverflow