簡體   English   中英

通過rpy2在Python中運行測試的問題

[英]issue running a test in Python, via rpy2

鑒於我是在兩周前開始編碼的,所以我覺得這將是一個快速修復。 我嘗試通過使用已經通過Rpy2在R中編寫的function(?)在Python中運行統計測試-Mantel,以查找兩個距離矩陣之間的相關性。 R模塊是“ ade4”,其中包含“ mantel.rtest”

from rpy2 import robjects

import rpy2.robjects as robjects

robjects.r('library(ade4)')
**EDIT** rmantel = robjects.r("mantel.rtest")

for i in windownA:

    M1 = asmatrix(identityA[i]).reshape(14,14)

    for j in windownB:

        M2 = asmatrix(identityB[j]).reshape(14,14)

       **EDIT** result = rmantel (M1, M2, nrepet = 9999)
        print result
        print ' '

編輯:這現在有效! “這將返回錯誤: “ AttributeError:'R'對象沒有屬性'mantel'” ,這使我相信此處調用的對象在“。”(即“ mantel”)與完整的“ mantel.rtest”處被截斷了。我嘗試將“ mantel.rtest”重新分配為不帶“。”的對象,例如rmantel =“ mantel.rtest”,然后將結果= robjects.r.rmantel(M1,M2,nrepet = 9999)替換為收到錯誤: “ AttributeError:'R'對象沒有屬性'rmantel'” -從而無法正常工作。關於如何解決此問題的任何想法?

新問題 Mantel測試需要“ dist”格式的數據,因此,當我運行編輯后的代碼時,會收到以下錯誤“ RRuntimeError:函數錯誤(m1,m2,nrepet = 99):預期為'dist'類的對象”

因此,我嘗試將文件轉換為該格式,然后在打印結果時,它是正確大小的矩陣的下半部分,但是所有字段都填充有“ NA”

robjects.r('library(ade4)')
rmantel = robjects.r("mantel.rtest")

distify = robjects.r("dist")

for i in windownA:

    M1 = asmatrix(identityA[i]).reshape(14,14)
    print distify(M1)
    MOne = distify(M1, 14)

    for j in windownB:

        M2 = asmatrix(identityB[j]).reshape(14,14)
        print distify(M2)
        MTwo = distify(M2, 14)

        result = rmantel(M1, M2, nrepet = 9999)
        print result
        print ' '

我明白了

1 2 3 4 5 6 7 8 9 10 11 12 13

2不適用

3不適用

4不適用不適用

5不適用不適用不適用

6不適用不適用不適用不適用

7不適用不適用不適用不適用

8不適用不適用不適用不適用不適用

9不適用不適用不適用不適用不適用

10不適用不適用不適用不適用不適用不適用

11不適用不適用不適用不適用不適用不適用不適用

12不適用不適用不適用不適用不適用不適用不適用不適用

13不適用不適用不適用不適用不適用不適用不適用不適用

14不適用不適用不適用不適用不適用不適用不適用不適用不適用

嘗試robjects.r['mantel.rtest']

In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop.
:from rpy2 import robjects
import rpy2.robjects as robjects
robjects.r('library(ade4)')
::::::--

In [3]: robjects.r['mantel.rtest']
Out[5]: <RFunction - Python:0xa2aac0c / R:0xac9ec04>

這也適用:

In [8]: robjects.r('mantel.rtest')
Out[8]: <RFunction - Python:0xaf7042c / R:0xac9ec04>

編輯(針對新問題):由於您說mantel.rtest需要dist格式的數據,因此我認為M1M2應該為dist格式。 但是M1M2似乎是numpy數組。 另一方面, MOneMTwo看起來可能是dist格式。

所以也許嘗試

result = rmantel(MOne, MTwo, nrepet = 9999)

從rpy2-2.1.x開始,推薦的簡單方法是:

from rpy2.robjects.packages import importr
stats = importr('stats')
ade4 = importr('ade4')

result = ade4.mantel_rtest(stats.dist(M1),
                           stats.dist(M2),
                           nrepet)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM