考虑到我两周前开始编码,我觉得这将是一个快速解决方案。我正在尝试运行一个统计测试 - 一个 Mantel,寻找两个距离矩阵之间的相关性 - 在 Python 中,使用已经通过 Rpy2 用 R 编写的函数(?)。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”重新分配为没有“。”的对象,例如)rmantel =“mantel.rtest”并将结果替换为 = robjects.r.rmantel(M1,M2,nrepet = 9999)仅收到错误:“AttributeError:'R' 对象没有属性'rmantel'” - 所以这不起作用。关于如何解决这个问题的任何想法?
新问题: Mantel 测试需要“dist”格式的数据,所以当我运行编辑后的代码时,我收到以下错误“RRuntimeError: Error in function (m1, m2, nrepet = 99) : Object of class 'dist' expected "
所以我尝试将文件转换为该格式,当我打印结果时,它是正确大小的矩阵的下半部分,但所有字段都填充了“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 NA NA NA NA NA
7 NA NA NA NA NA NA
8 NA NA NA NA NA NA NA
9 NA NA NA NA NA NA NA NA
10 NA NA NA NA NA NA NA NA NA
11 NA NA NA NA NA NA NA NA NA NA
12 NA NA NA NA NA NA NA NA NA NA NA
13 NA NA NA NA NA NA NA NA NA NA NA NA
14 NA NA NA NA NA NA NA NA NA NA NA NA NA