Python و Rpy2: استدعاء وظيفة المؤامرة مع خيارات تحتوي على "." فيهم

StackOverflow https://stackoverflow.com/questions/2125218

  •  22-09-2019
  •  | 
  •  

سؤال

لقد بدأت للتو في تعلم كيفية استخدام 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top