30

次のコードは、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 を必要なデータ型に変換するにはどうすればよいですか?

4

3 に答える 3

43

追加する必要があります

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

詳細については、rpy2 ドキュメントのnumpy セクションを参照してください(古い 2.x バージョンについては、こちら)

2.2.x より前は、インポートだけで十分でした。

numpy オブジェクトの rpy2 オブジェクトへの自動変換を切り替えるには、そのインポートだけで十分です。

関数 py2ri() (その関数に対して提出された元のパッチで行われたように) に含めることができたのに、なぜこれをオプションのインポートにするのですか?

どちらも有効で合理的なオプションですが、rpy2 を numpy から最も切り離すために設計上の決定が下されました。numpy が自動的にインストールされたからといって、プログラマーがそれを使いたいと思ったわけではありません。

于 2010-03-15T13:38:19.183 に答える
11

rpy2 2.2.4の場合、次を追加する必要がありました。

import rpy2.robjects.numpy2ri
rpy2.robjects.numpy2ri.activate()
于 2011-11-24T18:29:13.563 に答える
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
于 2012-06-04T15:42:47.780 に答える