문제
다음 코드는 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
제휴하지 않습니다 StackOverflow