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 存储为变量,但这似乎更接近最终答案。

我无法弄清楚我的 python 代码需要将 p.value 存储在新变量中。

4

2 回答 2

3

z1是一个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

一般来说,如果您只提供您想要表示的对象的名称,您将更容易弄清楚交互式会话中发生了什么。当交互式循环隐式使用的表示更有帮助时,使用print 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 回答