【问题标题】:Converting python objects for rpy2为 rpy2 转换 python 对象
【发布时间】:2011-01-27 16:40:23
【问题描述】:

以下代码应该在 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


    【解决方案1】:

    你需要添加

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

    在 rpy2 文档numpy section 中查看更多信息(here 用于旧的 2.x 版本)

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

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

    为什么要将此作为可选导入, 虽然它本可以包含在 函数 py2ri() (如在 为此提交的原始补丁 函数)?

    虽然两者都是有效且合理的 选项,设计决定已作出 为了将 rpy2 与 numpy 解耦 最多,不要假设 自动安装 numpy 意味着程序员想要使用 它。

    【讨论】:

    • 我有点不确定如何“显式激活”编辑@lgautier中提到的转换。我遇到了一个类似的问题,它在旧版本的 rpy2 中有效,但在 rpy2 2.2.2 中似乎被破坏了。你能提供一个简单的例子吗?
    • 对于未来的读者:在导入后添加rpy2.robjects.activate()。他们在导入有副作用时遇到了问题。
    【解决方案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
    

    【讨论】:

      【解决方案3】:

      对于 rpy2 2.2.4 我必须添加:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-18
        • 2014-07-31
        • 2018-02-22
        • 1970-01-01
        • 2019-09-02
        • 2022-11-09
        • 2012-06-02
        • 2012-10-30
        相关资源
        最近更新 更多