سؤال

بعد تثبيت RPy2 من

http://rpy.sourceforge.net/rpy2.html

أحاول استخدامه في Python 2.6 IDLE ولكني أتلقى هذا الخطأ:

>>> import rpy2.robjects as robjects
>>> robjects.r['pi']

<RVector - Python:0x0121D8F0 / R:0x022A1760>

ما الذي أفعله خطأ؟

هل كانت مفيدة؟

المحلول

هل حاول تبحث في ناقلات وهذا ما عاد؟

 >>> pi = robjects.r['pi']
 >>> pi[0]
 3.14159265358979

نصائح أخرى

للتوسع في إجابة شين.يستخدم rpy2 كائنات Python التالية لتمثيل أنواع R الأساسية:

  • ناقل R:العددية والمتجهات R، يتم تمثيل قوائم R كمتجهات R مع الأسماء، انظر أدناه
  • صفيف:مصفوفة R، وهي بشكل أساسي RVector ذات البعد
  • رداتافريم:إطار بيانات R

للإجبار على العودة إلى أنواع بايثون الأساسية انظر هنا.

على سبيل المثال، أستخدم هذا لتحويل قائمة R إلى إملاء بيثون:

rList = ro.r('''list(name1=1,name2=c(1,2,3))''')
pyDict = {}
for name,value in zip([i for i in rList.getnames()],[i for i in rList]):
    if len(value) == 1: pyDict[name] = value[0]
    else: pyDict[name] = [i for i in value]

في المترجم التفاعلية بيثون إذا كان التعبير بإرجاع قيمة ثم يتم طباعة تلك القيمة تلقائيا. على سبيل المثال إذا قمت بإنشاء القاموس واستخراج قيمة من أنه يتم طباعة قيمة تلقائيا، ولكن إذا كان هذا في برنامج نصي تنفيذ هذا لن يكون الأمر كذلك. نظرة على مثال بسيط تتبع هذا ليس خطأ ولكن ببساطة بيثون طباعة نتيجة التعبير:

>>> mymap = {"a":23}
>>> mymap["a"]
23

ونفس التعليمات البرمجية في بيثون السيناريو أن تنتج أي نتيجة على الإطلاق.

في التعليمات البرمجية التي يتم الوصول خريطة مثل هيكل مع رمز:

و>>> robjects.r['pi']

وهذا يعود بعض وجوه R2Py التي تمثيل سلسلة الافتراضي هو: <RVector - Python:0x0121D8F0 / R:0x022A1760>

إذا قمت بتغيير الرمز إلى شيء من هذا القبيل:

وpi = robjects.r['pi']

وكنت لا أرى الانتاج ولكن نتيجة المكالمة (ناقلات) سيتم تعيين إلى pi متغير وتكون متاحة للاستخدام.

وإذا نظرنا إلى الوثائق R2Py يبدو العديد من الكائنات افتراضيا المطبوعة باعتبارها اكتب في <> الأقواس وبعض المعلومات عنوان الذاكرة.

وهذا ليس خطأ، انها مجرد "repr" من robject عاد:

>>> r['pi']
<RVector - Python:0x2c14bd8 / R:0x3719538>
>>> repr(r['pi'])
'<RVector - Python:0x4b77908 / R:0x3719538>'
>>> str(r['pi'])
'[1] 3.141593'
>>> print r['pi']
[1] 3.141593

ويمكنك الحصول على قيمة 'بي' الوصول إليه عن طريق المؤشر

>>> r['pi'][0]
3.1415926535897931

لوصول عنصر من عناصر القوائم تسمى ( '<م> الكائن $ السمة ' R النحو) وأنا استخدم

>>> l = r.list(a=r.c(1,2,3), b=r.c(4,5,6))
>>> print l
$a
[1] 1 2 3

$b
[1] 4 5 6

>>> print dict(zip(l.names, l))['a']
[1] 1 2 3

ولكن أعتقد أنه يجب أن يكون هناك حل أفضل ...

ولقد وجدت أن هذا هو المعقول، مناقشة قصيرة الوحيدة لكيفية الانتقال ذهابا وإيابا من الأشياء R والثعبان. دفعت حل naufraghi في النهج التالي لتحويل data.frame، الذي يحتفظ قدرات تشريح أجمل من dataframe:

In [69]: import numpy as np

In [70]: import rpy2.robjects as ro

In [71]: df = ro.r['data.frame'](a=r.c(1,2,3), b=r.c(4.0,5.0,6.3))

In [72]: df
Out[72]: <RDataFrame - Python:0x5492200 / R:0x4d00a28>

In [73]: print(df)
  a   b
1 1 4.0
2 2 5.0
3 3 6.3

In [74]: recdf = np.rec.fromarrays(df, names=tuple(df.names))

In [75]: recdf
Out[75]: 
rec.array([(1, 4.0), (2, 5.0), (3, 6.2999999999999998)], 
      dtype=[('a', '<i4'), ('b', '<f8')])

ويبدو قليلا خارج الموضوع في هذه المرحلة، لكنني لست متأكدا ما الإجراء المناسب سيكون للقبض على هذا السؤال والجواب من الألغام!

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