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 ななななななななななななななななななななななななななななななななななななななななななななななな