[英]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
格式的数据,因此我认为M1
和M2
应该为dist
格式。 但是M1
和M2
似乎是numpy数组。 另一方面, MOne
和MTwo
看起来可能是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.