Python و Rpy2: استدعاء وظيفة المؤامرة مع خيارات تحتوي على "." فيهم
سؤال
لقد بدأت للتو في تعلم كيفية استخدام RPY2 مع Python. أنا قادر على صنع مؤامرات بسيطة وكذا ، لكنني واجهت المشكلة التي تستخدمها العديد من الخيارات في R ".". على سبيل المثال ، إليك مكالمة R تعمل:
barplot (t ، col = heat.colors (2) ، names.arg = c ("pwn" ، "pwn2"))
حيث t هي مصفوفة.
أريد استخدام نفس المكالمة في بيثون ، لكنه يرفض "." جزء من الأسماء. ما أفهمه هو أنك في بيثون تحل محل "". مع "_" ، لذلك الأسماء _arg على سبيل المثال ، ولكن هذا لا يعمل أيضًا. أعلم أن هذه مشكلة أساسية لذلك آمل أن يرى شخص ما هذا ويعرف الإصلاح. شكرًا!
المحلول
يمكنك استخدام قاموس هنا للحجج المسماة (استخدام **) مثل موصوفة في المستندات ، واتصل R مباشرة بالوظائف. تذكر أيضًا أن RPY2 يتوقع كائنات المتجهات الخاصة. نعم ، إنه أمر محرج بعض الشيء ، ولكن على الجانب الإيجابي ، يجب أن تكون قادرًا على فعل أي شيء في RPY2 يمكنك القيام به في R.
from rpy2 import robjects
color = robjects.r("heat.colors")()
names = robjects.StrVector(("pwn", "pwn2"))
robjects.r.barplot(t, col=color, **{"names.arg":names})
(لاحظ أن هذا مخصص لـ RPY2 الإصدار 2.0.x ؛ هناك بعض التغييرات في غير منشور 2.1 وهو ما لم تتح لي الفرصة للنظر إليه بعد.)
نصائح أخرى
لا أعرف ما إذا كانت RPY ستقبل هذا ، ولكن يمكنك الحصول على معلمات كلمات رئيسية مع فترات فيها. عليك أن تمرهم من خلال قاموس رغم ذلك. مثله:
>>> def f(**kwds): print kwds
...
>>> f(a=5, b_c=6)
{'a': 5, 'b_c': 6}
>>> f(a=5, b.c=6)
Traceback ( File "<interactive input>", line 1
SyntaxError: keyword cant be an expression (<interactive input>, line 1)
>>> f(**{'a': 5, 'b.c': 6})
{'a': 5, 'b.c': 6}
مع RPY2-2.1.0 ، ستكون إحدى الطرق لكتابتها:
from rpy2.robjects.packages import importr
graphics = importr("graphics")
grdevices = importr("grDevices")
graphics.barplot_default(t,
col = grdevices.heat_colors(2),
names_arg = StrVector(("pwn", "pwn2")))
إن الاضطرار إلى استخدام Barplot_Default (بدلاً من ذلك Barplot) يرجع إلى الاستخدام المكثف للهبارات "..." في توقيعات R'Sfunction وإلى حقيقة أن Save Name Name Sripration ستتطلب تحليلًا للرمز R الذي تحتوي عليه الوظيفة.
المزيد ، ومثال على وظيفة لإجراء ترجمة منهجية لـ "." إلى "_" في:http://rpy.sourceforge.net/rpy2/doc-2.1/html/robjects.html#functions