2

質問: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])

期待どおりの出力:

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

ただし、corr[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'

ヒント/ヘルプは大歓迎です!

4

2 に答える 2

1

セグメンテーション違反は、rpy2のバグとして報告する必要があるものです。それ以外の場合は、次のいずれかを試してください。

c.ro * 3

また:

c[0] * 3
于 2011-04-18T14:54:42.280 に答える
0

Pythonは実際にはの概念をサポートしていませんcasting。一部の限られた状況では、組み込みの型を使用したキャストのようなことを行うのは事実です。

ただし、それを超えると、オブジェクトをある形式から別の形式に変換するか、RオブジェクトをPythonのように動作させる何らかの形式のファサードまたはシムオブジェクトを作成するのはプログラマーの責任です。

print type(corr[3])使用されているPythonタイプを確認してください。数値の文字列表現である可能性があります。その場合は、数値をeval()浮動小数点数に変換するために使用できます。

于 2011-04-15T18:54:58.257 に答える