【发布时间】:2011-03-17 01:17:09
【问题描述】:
鉴于我两周前开始编码,我觉得这将是一个快速的解决方案。我正在尝试运行一个统计测试——一个 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' object has no attribute '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 无 NA
4 无 NA NA
5 无 NA NA NA
6 无 NA NA NA NA
7 无 NA NA NA NA NA
8 NA NA NA NA NA NA NA
9 无 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
14 NA NA NA NA NA NA NA NA NA NA NA NA NA
【问题讨论】:
-
请注意,这只是代码的相关部分...