代码之家  ›  专栏  ›  技术社区  ›  Boris Gorelik

为rpy2转换python对象

  •  26
  • Boris Gorelik  · 技术社区  · 16 年前

    下面的代码应该在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 回复  |  直到 14 年前
        1
  •  42
  •   krassowski    6 年前

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

    请参阅rpy2文档中的更多内容 numpy section ( here

    在2.2.x之前,仅进口就足够了。

    仅此一项进口就足以 自动转换

    为什么这是一个可选的导入, 虽然它可以被包括在 函数py2ri()(如 提交的原始补丁

    虽然两者都是合理有效的 为了把rpy2和numpy解耦 自动安装numpy 意味着程序员想使用 信息技术

        2
  •  11
  •   brink    14 年前

    对于rpy2 2.2.4,我必须添加:

    import rpy2.robjects.numpy2ri
    rpy2.robjects.numpy2ri.activate()
    
        3
  •  2
  •   flinz    14 年前

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