문제

다음 코드는 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()

보다 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top