簡體   English   中英

為 rpy2 轉換 python 對象

[英]Converting python objects for rpy2

下面的代碼應該在 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 轉換為所需的數據類型?

你需要添加

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

在 rpy2 文檔numpy 部分查看更多信息(這里是舊的 2.x 版本)

在 2.2.x 之前,僅導入就足夠了。

僅導入就足以將 numpy 對象自動轉換為 rpy2 對象。

為什么將其設為可選導入,而它可能已包含在函數 py2ri() 中(如為該函數提交的原始補丁中所做的那樣)?

盡管兩者都是有效且合理的選擇,但設計決策是為了最大限度地將 rpy2 與 numpy 分離,並且不要假設自動安裝 numpy 意味着程序員想要使用它。

對於 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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM