Приведите R объектов в Python с помощью rpy2 - PullRequest
2 голосов
/ 13 апреля 2011

Вопрос: как привести R объектов к объектам Python

Мой случай: мне нужно использовать результат cor.test () в процедуру Python.

correlation = robjects.r('function(x, y) cor.test(x, y)')
corr= correlation(robjects.IntVector(goodtotemp), robjects.IntVector(goodGDPs))
print corr

print corr[3]
print 'coef:',type(corr[3])

output, как и ожидалось:

     cor 
0.984881 
coef: <class 'rpy2.robjects.vectors.FloatVector'>

Тем не менее, я не могу использовать corr [3] в качестве объекта python,

c=corr[3]
print 'c:',c*10., type(c)

look (Вот откуда я знаю, что я что-то делаюнеправильно!), вывод:

c:
Traceback (most recent call last):
  File "./GDPAnalyzer.py", line 234, in <module>
    print 'c:',c*10., type(c)
TypeError: unsupported operand type(s) for *: 'FloatVector' and 'float'

Любая подсказка / помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

Ошибка сегментации - это то, о чем следует сообщать как об ошибке rpy2. В противном случае попробуйте либо:

c.ro * 3

или

c[0] * 3
0 голосов
/ 15 апреля 2011

Python действительно не поддерживает концепцию casting. Это правда, что в некоторых ограниченных случаях он выполняет что-то вроде приведения со встроенными типами.

Но кроме этого, программист должен преобразовывать объекты из одной формы в другую или создавать какую-либо форму фасада или прокладочного объекта, которая заставляет объект R вести себя как Python.

Попробуйте print type(corr[3]), чтобы увидеть, какой тип Python используется. Это может быть просто строковое представление числа, и в этом случае вы можете использовать eval() для преобразования его в число с плавающей точкой.

...