TypeError:不支持的操作数类型 - :' float'和' FloatVector'

时间:2016-10-31 17:18:06

标签: python r rpy2

我是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'

这意味着什么?如何更改?

提前致谢!

2 个答案:

答案 0 :(得分:0)

的结果
ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/ 
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/ 

是浮点数的R向量(因此rpy2对象r.phyper(integerA, integerB, integerC, integerD) )。您可以通过运行:

来更好地看到它
FloatVector

现在,如果要应用R向量化运算符(此处print(r.phyper(integerA, integerB, integerC, integerD)) 应用于向量中的所有元素),最简单的方法之一是使用两个操作数的R向量并使用“R运算符”访问器"-"

.ro

其中一个选择是通常在Python序列的元素操作方式上完成:

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

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

答案 1 :(得分:0)

我认为我的工作方式与Igautier建议的相似,但不是将我的1.0转换为FloatVector,而是将FloatVector转换为浮动,因为FloatVector似乎只包含1个元素:

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

感谢您的帮助!