سؤال

من المفترض أن يقوم التعليمات البرمجية التالية بإنشاء HeatMap في Ry2

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 إلى كائنات Ry2.

لماذا تجعل هذه الاستيراد الاختياري، في حين أنه كان من الممكن تضمينها في الوظيفة PY2RI () (كما تم في التصحيح الأصلي المقدمة لهذه الوظيفة)؟

على الرغم من أن كلاهما خيارات صالحة ومعقولة، فقد تم اتخاذ قرار التصميم من أجل فك ضغط RPY2 من Numpy أكثر من غيرها، ولا تفترض أن وجود Nutpy مثبتا تلقائيا يعني أن مبرمج أراد استخدامه.

تعديل:مع سلسلة RPY2 2.2.x، فإن الاستيراد وحده لم يعد كافيا. يحتاج التحويل إلى أن يتم تنشيطه صراحة.

نصائح أخرى

ل Ry2 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