【问题标题】:Getting part of R object from python using rpy2使用 rpy2 从 python 获取 R 对象的一部分
【发布时间】:2013-04-13 04:57:34
【问题描述】:

我可以使用 R 获得我需要的输出,但我无法在 python 的 rpy2 模块中重现。

在 R 中:

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

给予

[1] 0.05

在python中:

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 存储在新变量中。

【问题讨论】:

    标签: python r rpy2


    【解决方案1】:

    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
    

    一般来说,如果您只提供您想要表示的对象的名称,您将更容易弄清楚交互式会话中发生了什么。当交互式循环隐式使用的repr(x) 表示更有帮助时,使用print x 语句通过str(x) 转换事物。如果您在脚本中执行操作,请改用print repr(x)

    【讨论】:

    • 非常感谢 repr 的建议,这不是我熟悉的东西。正如我在对 muraveill 的评论中指出的那样,这有效,但同样给我“分段错误:11”崩溃
    【解决方案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

    【讨论】:

    • 谢谢,这实际上是我一直在尝试的,但一直导致“分段错误:11”崩溃。尝试抓取“方法”工作正常,所以我猜这是我的电脑出了问题。
    • @ded:这很可能是 R 和 rpy2 之间不兼容的编译库。这可能在升级 R 而不重新安装 rpy2 时发生(如果我依赖用户的报告,主要是在最近的 OS X 上)。如果段错误仍然存​​在,请在 rpy2 的 bitbucket 页面上提交错误(带有触发它的代码)。
    猜你喜欢
    • 1970-01-01
    • 2017-06-28
    • 2020-03-29
    • 1970-01-01
    • 2020-08-03
    • 2017-07-24
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多