簡體   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