繁体   English   中英

TypeError:-:“ float”和“ FloatVector”的不受支持的操作数类型

[英]TypeError: unsupported operand type(s) for -: 'float' and 'FloatVector'

我是Python的新手,甚至是rpy2的新手,这使我可以通过Python使用R。

我试图从rpy2导入r:

    from rpy2.robjects import r

这似乎可行,我继续我的代码,该代码有时包含以下内容:

    pval=1.0-r.phyper(integerA, integerB, integerC, integerD)

这给出了以下错误:

    TypeError: unsupported operand type(s) for -: 'float' and 'FloatVector'

这是什么意思,我该如何更改?

提前致谢!

的结果

r.phyper(integerA, integerB, integerC, integerD)

是float的R向量(因此rpy2对象FloatVector )。 通过运行以下命令,您可能会更好地看到它:

print(r.phyper(integerA, integerB, integerC, integerD))

现在,如果您要应用R向量矢量运算符(此处对向量中的所有元素应用"-" ),最简单的方法之一是对两个操作数都使用R向量,并使用“ R Operator”访问器.ro

from rpy2.robjects.vectors import FloatVector
p = FloatVector((.6, .7, .99))

pval= FloatVector([1.0])).ro - p

一种替代方法是按照通常在Python序列上进行元素操作的方式进行:

pval = [1.0 - x for x in p]

我认为我的工作原理与Igautier所建议的类似,但是我没有将我的1.0也转换为FloatVector,而是将FloatVector转换为float,因为FloatVector似乎只包含1个元素:

    p = r.phyper(intA, intB, intC, intD)
    p = float(p[0])
    pval = 1.0 - p

谢谢你的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM