2011-04-13 10 views
2

問題,R怎麼投反對蟒蛇的人演員[R對象到Python中的人與rpy2

我的情況:我需要使用的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]) 

輸出,符合市場預期:

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

Howover,我不能用科爾[3]作爲一個Python對象,

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

樣子(這是我怎麼知道我做錯了!),輸出:

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' 

任何提示/幫助表示讚賞!

+0

正如錯誤消息所描述的,你不能乘以'FloatVector'和'float'。嘗試明確地將'c'轉換爲'float' - 像這樣 - 'float(c)* 10'並且看看它是否有效。 – 2011-04-13 17:12:51

+0

這不是真的。做:=> float(c)* 10給出:=> c:getsegcount 分段錯誤 – Horacio 2011-04-13 18:23:02

回答

1

段故障是應報告爲rpy2一個錯誤的東西。否則,無論是嘗試:

c.ro * 3 

或:

c[0] * 3 
+0

你的第二個建議很好用! – Horacio 2011-09-01 17:59:02

0

Python確實不支持casting的概念。確實,在某些有限的情況下,它確實會像使用內置類型進行投射一樣。

但除此之外它是由程序員從一種形式轉換對象或創建某種形式的立面或墊片對象,使得將R對象表現得像一個Python之一。

嘗試print type(corr[3])看到的是正在使用的Python類型。它可能只是數字的字符串表示,在這種情況下,您可以使用eval()將其轉換爲浮點數。