3

R を使用して必要な出力を取得できますが、python の rpy2 モジュール内で再現できません。

Rで:

> wilcox.test(c(1,2,3), c(100,200,300), alternative = "less")$p.value

与える

[1] 0.05

パイソンでは:

import rpy2.robjects as robjects
rwilcox = robjects.r['wilcox.test']
x = robjects.IntVector([1,2,3,])
y = robjects.IntVector([100,200,300])
z = rwilcox(x,y, alternative = "less")
print z

与えます:

Wilcoxon rank sum test  
data:  1:3 and c(100L, 200L, 300L)  
W = 0, p-value = 0.05  
alternative hypothesis: true location shift is less than 0 

と:

z1 = z.rx('p.value')
print z1

与えます:

$p.value  
[1] 0.05

まだ変数として保存されている 0.05 の最終値を取得しようとしていますが、これは最終的な答えに近いようです。

p.value を新しい変数に格納するために、自分の Python コードが何を必要としているかを理解できません。

4

2 に答える 2

3

z11 つの要素をListVector含むものです:FloatVector

>>> z1
<ListVector - Python:0x4173368 / R:0x36fa648>
[FloatVector]
  p.value: <class 'rpy2.robjects.vectors.FloatVector'>
  <FloatVector - Python:0x4173290 / R:0x35e6b38>
[0.050000]

z1[0][0]を使用して、または単にフロート自体を抽出できますfloat(z1[0])

>>> z1[0][0]
0.05
>>> type(z1[0][0])
<type 'float'>
>>> float(z1[0])
0.05

一般に、表現したいオブジェクトの名前を指定するだけで、対話型セッションで何が起こっているかを簡単に把握できます。Usingprint xステートメントは、対話型ループによって暗黙的に使用される表現がはるかに役立つstr(x)場合に、物事を変換します。repr(x)スクリプトで何かをしている場合は、print repr(x)代わりに を使用してください。

于 2013-04-19T19:08:00.627 に答える
2

list() を使用しているだけですか?

pval = z.rx2('p-value')
print list(pval) # [0.05]

rpy2 は numpy でもうまく動作します:

import numpy
pval = numpy.array(pval)
print pval       # array([ 0.05])

http://rpy.sourceforge.net/rpy2/doc-2.3/html/numpy.html#from-rpy2-to-numpy

于 2013-04-19T19:01:13.477 に答える