0

2 週間前にコーディングを開始したことを考えると、これは簡単な修正になると思います。Rpy2 を介して、R で既に記述されている関数 (?) を使用して、Python で統計テスト (マンテル、2 つの距離行列間の相関関係を探す) を実行しようとしています。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' object has no attribute 'mantel'"これは、ここで呼び出されているオブジェクトが "." で切り捨てられていると信じさせます (つまり、"mantel" と完全な "mantel.rtest 「.」のないオブジェクトとして「mantel.rtest」を再割り当てしようとしました ex) rmantel = "mantel.rtest" そして、その結果 = robjects.r.rmantel (M1, M2, nrepet = 9999) のみを代入してみました「AttributeError: 'R' オブジェクトに属性 'rmantel' がありません」というエラーが表示されます。これは機能しませんでした。この問題を回避する方法について何か考えはありますか?

新しい問題: Mantel テストには "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 ななななななななななななななななななななななななななななななななななななななななななななななな

4

2 に答える 2

0

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)
于 2010-07-17T09:48:44.087 に答える
0

試してください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データが必要 だとおっしゃっているので、形式にする必要があると思います。しかし、numpy 配列のように見えます。一方、それらはフォーマットされているように見えます。distM1M2distM1M2MOneMTwodist

だから多分試してみてください

result = rmantel(MOne, MTwo, nrepet = 9999)
于 2010-07-16T16:07:24.350 に答える