2010-03-15 35 views
24

Các mã sau đây được cho là để tạo ra một bản đồ nhiệt trong rpy2Chuyển đổi đối tượng python cho rpy2

import numpy as np 
from rpy2.robjects import r 
data = np.random.random((10,10)) 
r.heatmap(data)  

Tuy nhiên, nó kết quả trong các lỗi sau

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. 

Từ các tài liệu tôi học r.heatmap rằng mong đợi "một ma trận số". Làm cách nào để chuyển đổi np.array thành kiểu dữ liệu được yêu cầu?

Trả lời

35

Bạn cần phải thêm

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

Xem http://rpy.sourceforge.net/rpy2/doc-2.2/html/numpy.html:

Đó import một mình là đủ để công tắc chuyển đổi tự động NumPy đối tượng thành các đối tượng rpy2.

Tại sao làm cho này một nhập khẩu không bắt buộc, trong khi nó có thể đã được đưa vào chức năng py2ri() (như thực hiện trong vá gốc nộp cho rằng chức năng)?

Mặc dù cả hai đều hợp lệ và hợp lý lựa chọn, quyết định thiết kế được đưa để tách rpy2 từ NumPy nhiều nhất, và đừng cho rằng đã cài đặt NumPy tự động có nghĩa là một lập trình viên muốn sử dụng nó .

chỉnh sửa: Với loạt rpy2 2.2.x, việc nhập khẩu một mình không còn đủ. Chuyển đổi cần được kích hoạt một cách rõ ràng.

+0

tôi là một chút không chắc chắn về cách "kích hoạt rõ ràng" chuyển đổi như được đề cập trong chỉnh sửa @lgautier. Tôi đang gặp phải một vấn đề tương tự mà làm việc trong một phiên bản cũ của rpy2 nhưng có vẻ bị hỏng trong rpy2 2.2.2. Bạn có thể cung cấp một ví dụ ngắn gọn không? – mishaF

+0

Đối với người đọc trong tương lai: thêm 'rpy2.robjects.activate()' sau khi nhập. Họ có vấn đề với việc nhập khẩu có tác dụng phụ. – agf

+0

@agf: Cảm ơn, agf. – unutbu

10

Đối rpy2 2.2.4 tôi đã có thêm:

import rpy2.robjects.numpy2ri 
rpy2.robjects.numpy2ri.activate() 
Các vấn đề liên quan